Pagini recente » Cod sursa (job #1991292) | Cod sursa (job #2897637) | Cod sursa (job #1502509) | Cod sursa (job #571893) | Cod sursa (job #1268693)
#include <fstream>
#include <vector>
using namespace std;
ifstream is("cerere.in");
ofstream os("cerere.out");
vector<int> k, d, ta, vfr;
vector<vector<int> > G;
vector<bool> s;
int n, aux, x, y, vf;
void DF( int m );
int main()
{
is >> n;
G.resize(n+1);
k.resize(n+1);
d.resize(n+1);
s.resize(n+1);
ta.resize(n+1);
vfr.resize(n+1);
for ( int i = 1; i <= n; i++ )
is >> k[i];
for ( int i = 1; i <= n; i++ )
{
is >> x >> y;
G[x].push_back(y);
vfr[y] = true;
}
for ( int i = 1; i <= n; i++ )
if ( vfr[i] == false )
{
vf = i;
break;
}
DF(vf);
for ( int i = 1; i <= n; i++ )
os << d[i] << ' ';
is.close();
os.close();
return 0;
}
void DF( int m )
{
s[x] = true;
for ( vector<int>::iterator it = G[m].begin(); it != G[m].end(); ++it )
{
if ( k[(*it)] == 0 )
ta[++aux] = 0;
else
ta[++aux] = ta[aux-k[(*it)]] + 1;
d[(*it)] = ta[aux];
DF((*it));
}
ta[aux--] = 0;
}