Pagini recente » Cod sursa (job #87299) | Cod sursa (job #2713966) | Cod sursa (job #2588242) | Cod sursa (job #867797) | Cod sursa (job #643108)
Cod sursa(job #643108)
#include<fstream>
#include<vector>
#define NMAX 100100
using namespace std;
vector <int> A[NMAX];
int n,radacina,v[NMAX],sol[NMAX],drum[NMAX];
///////////////////////
#define MaxBuffer 8192
char buffer[MaxBuffer];
int bufferIndex=8191;
///////////////////////
inline void read_buffer(istream& in,int& x) {
do {if(++bufferIndex==MaxBuffer) {
bufferIndex=0;
in.read(buffer,MaxBuffer);
}
}while( buffer[bufferIndex]<'0'||buffer[bufferIndex]>'9' );
for(x=0;buffer[bufferIndex]>='0'&&buffer[bufferIndex]<= '9';) {
x=x*10+buffer[bufferIndex]-'0';
if(++bufferIndex==MaxBuffer) {
bufferIndex=0;
in.read(buffer,MaxBuffer);
}
}
}
void afis() {
int i;
ofstream out("cerere.out");
for(i=1;i<=n;i++)
out<<sol[i]<<' ';
out<<'\n';
out.close();
}
void dfs(int nod,int nivel) {
unsigned int i,j;
drum[nivel]=nod;
if(v[nod]==0)
sol[nod]=0;
else
sol[nod]=sol[drum[nivel-v[nod]]]+1;
for(i=0;i<A[nod].size();i++) {
j=A[nod][i];
dfs(j,nivel+1);
}
}
void citire() {
int i,x,y;
ifstream in("cerere.in");
read_buffer(in,n);
for(i=1;i<=n;i++)
read_buffer(in,v[i]);
radacina=n*(n+1)>>1;
for(i=1;i<n;i++) {
read_buffer(in,x);
read_buffer(in,y);
A[x].push_back(y);
radacina-=y;
}
in.close();
}
int main() {
citire();
dfs(radacina,1);
afis();
return 0;
}