Pagini recente » Cod sursa (job #291460) | Cod sursa (job #1874193) | Cod sursa (job #1772061) | Cod sursa (job #301062) | Cod sursa (job #1163558)
#include <fstream>
#include <vector>
using namespace std;
typedef struct Nod
{
int x;
Nod *a;
} *pNod;
int n,r;
pNod v[100001];
int str[100001],rez[100001];
bool marc[100001];
vector<int> s;
void add(pNod &destinatie,int valoare)
{
pNod p;
p = new Nod;
p->x = valoare;
p->a = destinatie;
destinatie = p;
}
void citire()
{
int a,b;
ifstream f("cerere.in");
f>>n;
for(int i=1;i<=n;i++)
f>>str[i];
for(int i=1;i<n;i++)
{
f>>a>>b;
marc[b]=true;
add(v[a],b);
}
f.close();
}
int radacuna()
{
int i=0;
for(i=1;i<=n;i++)
if(marc[i]==false)
break;
return i;
}
void df(int nod)
{
for(pNod p=v[nod];p!=NULL;p=p->a)
{
if(str[p->x]==0)
rez[p->x]=0;
else
rez[p->x]=rez[s[s.size()-str[p->x]]]+1;
s.push_back(p->x);
df(p->x);
s.pop_back();
}
}
void afisare()
{
ofstream g("cerere.out");
for(int i=1;i<=n;i++)
g<<rez[i]<<" ";
g<<"\n";
g.close();
}
int main()
{
citire();
r=radacuna();
s.push_back(r);
df(r);
afisare();
return 0;
}