Pagini recente » Cod sursa (job #3152626) | Cod sursa (job #50115) | Cod sursa (job #2309125) | Cod sursa (job #2663405) | Cod sursa (job #986542)
Cod sursa(job #986542)
//#include <cstdio>
//#include <vector>
//#include <stack>
//
//#define FILEIN "cerere.in"
//#define FILEOUT "cerere.out"
//
//using namespace std;
//
//const int NMAX = 100005;
//
//int N;
//int K[NMAX];
//int G[NMAX];
//vector<int> F[NMAX], P[NMAX];
//int st[NMAX];
//int top;
//
//void dfs(int node) {
// top++;
// st[top] = node;
// if (K[node] != 0) {
// G[node] = G[st[top-K[node]]] + 1;
// }
// size_t i;
// for ( i = 0; i < F[node].size(); i++ ) {
// dfs(F[node][i]);
// }
// top--;
//}
//
//int main()
//{
// top = 0;
// int i, x, y;
// freopen(FILEIN, "r", stdin);
// freopen(FILEOUT, "w", stdout);
//
// scanf("%d", &N);
// for ( i = 1; i <= N; i++) {
// scanf("%d", &K[i]);
// }
// for ( i = 1; i < N; i++) {
// scanf("%d %d", &x, &y);
// F[x].push_back(y);
// P[y].push_back(x);
// }
//
// for ( i = 1; i <= N; i++) {
// if (P[i].size() == 0) {
// dfs(i);
// break;
// }
// }
//
///* for ( i = 1; i <= N; i++ ) {
// if (K[i] == 0) {
// dfs2(i, 0);
// }
// }*/
//
// for ( i = 1; i <= N; i++ ) {
// printf("%d ", G[i]);
// }
// printf("\n");
//
//
// return 0;
//}
#include <fstream>
#include <iostream>
#include <vector>
#define FILEIN "cerere.in"
#define FILEOUT "cerere.out"
using namespace std;
const int NMAX = 100005;
int N;
int K[NMAX];
int G[NMAX];
vector<int> F[NMAX], P[NMAX];
int st[NMAX];
int top;
void dfs(int node) {
top++;
st[top] = node;
if (K[node] != 0) {
G[node] = G[st[top-K[node]]] + 1;
}
size_t i;
for ( i = 0; i < F[node].size(); i++ ) {
dfs(F[node][i]);
}
top--;
}
int main()
{
top = 0;
int i, x, y;
ifstream f(FILEIN);
ofstream g(FILEOUT);
f >> N;
for ( i = 1; i <= N; i++) {
f >> K[i];
}
for ( i = 1; i < N; i++) {
f >> x >> y;
F[x].push_back(y);
P[y].push_back(x);
}
for ( i = 1; i <= N; i++) {
if (P[i].size() == 0) {
dfs(i);
break;
}
}
/* for ( i = 1; i <= N; i++ ) {
if (K[i] == 0) {
dfs2(i, 0);
}
}*/
for ( i = 1; i <= N; i++ ) {
g << G[i] << ' ';
}
g << '\n';
return 0;
}