#include<bits/stdc++.h> using namespace std; typedef long long ll; #define rep(a, b) for(int a = 0; a < (b); ++a) #define st first #define nd second #define pb push_back #define all(a) a.begin(), a.end() const ll INF=1e18+7; const int LIM=1e5+7; vector<pair<ll,ll>>V[LIM]; ll T[LIM], aktma[LIM], ans, n; void DFS(int x) { for(auto i : V[x]) if(aktma[i.st]<aktma[x]-i.nd && aktma[x]-i.nd>=0) { if(aktma[i.st]==-INF) ++ans; aktma[i.st]=max(aktma[x]-i.nd, T[i.st]); DFS(i.st); if(ans==n) return; } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n; rep(i, n) cin >> T[i]; rep(i, n-1) { int a, b; ll c; cin >> a >> b >> c; --a; --b; V[a].pb({b, c}); V[b].pb({a, c}); } rep(i, n) { rep(j, n) aktma[j]=-INF; ans=1; aktma[i]=T[i]; DFS(i); cout << ans << " "; } cout << '\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 | #include<bits/stdc++.h> using namespace std; typedef long long ll; #define rep(a, b) for(int a = 0; a < (b); ++a) #define st first #define nd second #define pb push_back #define all(a) a.begin(), a.end() const ll INF=1e18+7; const int LIM=1e5+7; vector<pair<ll,ll>>V[LIM]; ll T[LIM], aktma[LIM], ans, n; void DFS(int x) { for(auto i : V[x]) if(aktma[i.st]<aktma[x]-i.nd && aktma[x]-i.nd>=0) { if(aktma[i.st]==-INF) ++ans; aktma[i.st]=max(aktma[x]-i.nd, T[i.st]); DFS(i.st); if(ans==n) return; } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n; rep(i, n) cin >> T[i]; rep(i, n-1) { int a, b; ll c; cin >> a >> b >> c; --a; --b; V[a].pb({b, c}); V[b].pb({a, c}); } rep(i, n) { rep(j, n) aktma[j]=-INF; ans=1; aktma[i]=T[i]; DFS(i); cout << ans << " "; } cout << '\n'; } |