Pagini recente » Istoria paginii runda/simulare_oji_2023_clasele_11_12_11_martie/clasament | Cod sursa (job #1536856) | Cod sursa (job #1344362) | Cod sursa (job #624979) | Cod sursa (job #982649)
Cod sursa(job #982649)
#include<stdio.h>
#include<vector>
#include<queue>
#define NMAX 100007
using namespace std;
int nr, n;
queue < int > q;
vector < int > v[NMAX];
int t[NMAX], a[NMAX];
void bfs(int u){
q.push(u);
t[u] = 0;
while(! q.empty()){
int nod = q.front();
for(int i = 0; i < v[nod].size(); ++ i)
if(t[v[nod][i]] == 0){
q.push(v[nod][i]);
t[v[nod][i]] = nod;
}
q.pop();
}
}
int main(){
int u = 0, x = 0, y = 0;
freopen("cerere.in", "r", stdin);
freopen("cerere.out", "w", stdout);
scanf("%d", &n);
for(int i = 1; i <= n; ++ i){
scanf("%d", &a[i]);
if(a[i] == 0 && u == 0)
u = i;
}
for(int i = 1; i < n; ++ i){
scanf("%d %d", &x, &y);
v[x].push_back(y);
v[y].push_back(x);
}
bfs(u);
for(int i = 1; i <= n; ++ i)
if(a[i] == 0)
printf("0 ");
else{
int u = i, sol = 0;
while(1){
++ sol;
nr = a[u];
while(nr > 0){
-- nr;
u = t[u];
}
if(a[u] == 0)
break;
}
printf("%d ", sol);
}
return 0;
}