#include<bits/stdc++.h> using namespace std; long long tab[100010]; int licznik; vector<pair<int, long long>>graf[100010]; bool comp(pair<int,long long>a, pair<int,long long>b){ return a.second < b.second; } long long dfs(int w, int o, long long r) { licznik++; r = max(r, tab[w]); for(auto j: graf[w]) if(j.first!=o) if(j.second<=r) r = max(r, dfs(j.first, w, r-j.second)-j.second); return r; } int main() { int n, i, a, b; long long c; scanf("%d", &n); for(i=1;i<=n;i++) scanf("%lld", &tab[i]); for(i=1;i<n;i++){ scanf("%d%d%lld", &a, &b, &c); graf[a].push_back({b,c}); graf[b].push_back({a,c}); } for(i=1;i<=n;i++) sort(graf[i].begin(), graf[i].end(), comp); for(i=1;i<=n;i++){ licznik = 0; dfs(i, 0, 0); printf("%d ", licznik); } }
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 | #include<bits/stdc++.h> using namespace std; long long tab[100010]; int licznik; vector<pair<int, long long>>graf[100010]; bool comp(pair<int,long long>a, pair<int,long long>b){ return a.second < b.second; } long long dfs(int w, int o, long long r) { licznik++; r = max(r, tab[w]); for(auto j: graf[w]) if(j.first!=o) if(j.second<=r) r = max(r, dfs(j.first, w, r-j.second)-j.second); return r; } int main() { int n, i, a, b; long long c; scanf("%d", &n); for(i=1;i<=n;i++) scanf("%lld", &tab[i]); for(i=1;i<n;i++){ scanf("%d%d%lld", &a, &b, &c); graf[a].push_back({b,c}); graf[b].push_back({a,c}); } for(i=1;i<=n;i++) sort(graf[i].begin(), graf[i].end(), comp); for(i=1;i<=n;i++){ licznik = 0; dfs(i, 0, 0); printf("%d ", licznik); } } |