#include <bits/stdc++.h> using namespace std; typedef long long ll; ll n, a, b, c; vector<pair<int, ll> > pol[100001]; vector<int> dos[100001]; int odwit = 0; int odw[100001]; int il[100001]; ll zas[100001]; queue<int> kol; void dfs(int w, int p, ll g) { odw[w] = odwit; dos[odwit].push_back(w); for(auto e:pol[w]) { if(e.first == p) continue; if(g + e.second <= zas[odwit]) dfs(e.first, w, g+ e.second); } } int main() { scanf("%lld", &n); for(int i=0; i^n; ++i) { scanf("%lld", &zas[i+1]); } for(int i=1; i^n; ++i) { scanf("%lld%lld%lld", &a, &b, &c); pol[a].push_back({b, c}); pol[b].push_back({a, c}); } for(int i=0; i^n; ++i) { odwit ++; dfs(i+1, 0, 0); } for(int i=0; i^n; ++i) { kol.push(i+1); odwit ++; while(!kol.empty()) { int w = kol.front(); kol.pop(); odw[w] = odwit; il[i+1]++; for(auto e:dos[w]) { if(odw[e] == odwit) continue; odw[e] = odwit; kol.push(e); } } printf("%d ", il[i+1]); } printf("\n"); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | #include <bits/stdc++.h> using namespace std; typedef long long ll; ll n, a, b, c; vector<pair<int, ll> > pol[100001]; vector<int> dos[100001]; int odwit = 0; int odw[100001]; int il[100001]; ll zas[100001]; queue<int> kol; void dfs(int w, int p, ll g) { odw[w] = odwit; dos[odwit].push_back(w); for(auto e:pol[w]) { if(e.first == p) continue; if(g + e.second <= zas[odwit]) dfs(e.first, w, g+ e.second); } } int main() { scanf("%lld", &n); for(int i=0; i^n; ++i) { scanf("%lld", &zas[i+1]); } for(int i=1; i^n; ++i) { scanf("%lld%lld%lld", &a, &b, &c); pol[a].push_back({b, c}); pol[b].push_back({a, c}); } for(int i=0; i^n; ++i) { odwit ++; dfs(i+1, 0, 0); } for(int i=0; i^n; ++i) { kol.push(i+1); odwit ++; while(!kol.empty()) { int w = kol.front(); kol.pop(); odw[w] = odwit; il[i+1]++; for(auto e:dos[w]) { if(odw[e] == odwit) continue; odw[e] = odwit; kol.push(e); } } printf("%d ", il[i+1]); } printf("\n"); } |