#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); } } |
English