Pagini recente » Cod sursa (job #3322997) | Cod sursa (job #2076178) | Cod sursa (job #3301917) | Cod sursa (job #2872256) | Cod sursa (job #3306583)
#include <fstream>
#include<vector>
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
int nr[100001];
int dp[100001];
int cnt=0,ram=0;
int nr1=1;
int what=0;
vector<int> se[100001];
void dfs(int sursa)
{
if(ram)
{
ram--;
dfs(se[sursa][0]);
}
else{
nr1++;
}
if(!what && dp[sursa])
{
nr1+=dp[sursa];
what=1;
return;
}
if(!what && !nr[sursa]){
what=1;
}
else if(!what){
ram=nr[sursa];
dfs(se[sursa][0]);
dp[sursa]=nr1;
}
}
int main()
{
int n,a,b;
in>>n;
for(int i=1; i<=n; i++)
{
in>>nr[i];
}
for(int i=1; i<=n-1; i++)
{
in>>a>>b;
se[b].push_back(a);
}
for(int i=1; i<=n; i++)
{
dp[i-1]=nr1;
nr1=0;
what=0;
ram=nr[i];
if(nr[i]==0){
out<<0<<" ";
}
else{
dfs(i);
out<<nr1<<" ";
}
}
return 0;
}