9200 | 2024. 02. 18 16:06:13 | BenedekMarton | Tevefarm | cpp17 | Részben helyes 32/50 | 93ms | 14792 KiB |
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
int tevter[n+1];
for(int i=1; i<=n; i++)
{
cin >> tevter[i];
}
int osv[n+1];
osv[1]=0;
for(int i=2; i<=n; i++)
{
cin >> osv[i];
}
vector <int> gyv[n+1];
for(int i=1; i<=n; i++)
{
gyv[osv[i]].push_back(i);
}
int keszgyersz[n+1], osztev[n+1];
bool kiv[n+1];
for(int i=1; i<=n; i++)
{
kiv[i]=0;
keszgyersz[i]=0;
}
queue <int> q;
for(int i=1; i<=n; i++)
{
if(gyv[i].size()==0)
{
q.push(i);
}
}
int x, gyosz;
while(!q.empty())
{
x=q.front();
q.pop();
gyosz=0;
for(int i=0; i<gyv[x].size(); i++)
{
gyosz=gyosz+osztev[gyv[x][i]];
}
if(gyosz>tevter[x])
{
osztev[x]=gyosz;
}
else
{
osztev[x]=tevter[x];
kiv[x]=1;
}
keszgyersz[osv[x]]++;
//cout << x << " " << osztev[x] << endl;
if(x!=0)
{
if(keszgyersz[osv[x]]==gyv[osv[x]].size())
{
q.push(osv[x]);
}
}
}
cout << osztev[1] << endl;
vector <int> megoldas;
if(kiv[1])
{
cout << 1 << endl << 1;
}
q.push(1);
while(!q.empty())
{
x=q.front();
q.pop();
for(int i=0; i<gyv[x].size(); i++)
{
if(kiv[gyv[x][i]])
{
megoldas.push_back(gyv[x][i]);
}
else
{
q.push(gyv[x][i]);
}
}
}
cout << megoldas.size() << endl;
for(int i=0; i<megoldas.size(); i++)
{
cout << megoldas[i] << " ";
}
return 0;
}
Részfeladat | Összpont | Teszt | Verdikt | Idő | Memória | ||
---|---|---|---|---|---|---|---|
base | 32/50 | ||||||
1 | Elfogadva | 0/0 | 3ms | 1956 KiB | |||
2 | Elfogadva | 0/0 | 3ms | 2396 KiB | |||
3 | Részben helyes | 2/4 | 3ms | 2424 KiB | |||
4 | Elfogadva | 4/4 | 3ms | 2336 KiB | |||
5 | Futási hiba | 0/4 | 3ms | 2388 KiB | |||
6 | Elfogadva | 4/4 | 3ms | 2716 KiB | |||
7 | Elfogadva | 4/4 | 43ms | 8556 KiB | |||
8 | Elfogadva | 6/6 | 50ms | 10028 KiB | |||
9 | Elfogadva | 6/6 | 59ms | 11520 KiB | |||
10 | Elfogadva | 6/6 | 67ms | 12732 KiB | |||
11 | Hibás válasz | 0/6 | 83ms | 13332 KiB | |||
12 | Hibás válasz | 0/6 | 93ms | 14792 KiB |