Pagini recente » Cod sursa (job #2718242) | Cod sursa (job #1111850) | Cod sursa (job #1996378) | Cod sursa (job #1393218) | Cod sursa (job #1512116)
#include <stdio.h>
#include <ctype.h>
#define MAX_N 100000
#define BUFFSIZE 65536
#define LOG 17
char buf[BUFFSIZE];
int pos = BUFFSIZE;
inline char getChar(FILE *f) {
if (pos == BUFFSIZE) {
fread(buf, 1, BUFFSIZE, f);
pos = 0;
}
return buf[pos++];
}
inline int readInt(FILE *f) {
int q = 0;
char c;
do {
c = getChar(f);
} while (!isdigit(c));
do {
q = (10 * q) + (c - '0');
c = getChar(f);
} while (isdigit(c));
return q;
}
int ask[MAX_N];
int d[LOG][MAX_N];
int main(void) {
FILE *f = fopen("cerere.in", "r");
int n, i, u, v, k, q;
n = readInt(f);
for (i = 0; i < n; i++) {
ask[i] = readInt(f);
}
for (i = 1; i < n; i++) {
u = readInt(f) - 1;
v = readInt(f) - 1;
d[0][v] = u;
}
fclose(f);
for (i = 1; (1 << i) <= n; i++) {
for (k = 0; k < n; k++) {
d[i][k] = d[i - 1][d[i - 1][k]];
}
}
f = fopen("cerere.out", "w");
for (i = 0; i < n; i++) {
u = i;
q = 0;
while (ask[u] != 0) {
v = ask[u];
for (k = 0; (1 << k) <= v; k++) {
if ((v >> k) & 1) {
u = d[k][u];
}
}
q++;
}
fprintf(f, "%d ", q);
}
fclose(f);
return 0;
}