#include <bits/stdc++.h> using namespace std; const int MX=100100; int n,i,x,y,res,ans[MX],u[MX]; long long a[MX],z; vector<int> g[MX],nxt[MX]; vector<long long> e[MX]; void dfs(int i, int p, long long d) { if (x!=i) nxt[x].push_back(i); for (int j=0; j<g[i].size(); j++) { int nxt=g[i][j]; if (nxt==p) continue; if (d>=e[i][j]) dfs(nxt,i,d-e[i][j]); } } void solve(int i) { u[i]=x; ++res; for (int j: nxt[i]) if (u[j]!=x) solve(j); } int main() { scanf("%d",&n); for (i=1; i<=n; i++) scanf("%lld",&a[i]); for (i=1; i<n; i++) { scanf("%d%d%lld",&x,&y,&z); g[x].push_back(y); e[x].push_back(z); g[y].push_back(x); e[y].push_back(z); } for (x=1; x<=n; x++) dfs(x,0,a[x]); for (x=1; x<=n; x++) { res=0; solve(x); printf("%d ",res); } return 0; }
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 | #include <bits/stdc++.h> using namespace std; const int MX=100100; int n,i,x,y,res,ans[MX],u[MX]; long long a[MX],z; vector<int> g[MX],nxt[MX]; vector<long long> e[MX]; void dfs(int i, int p, long long d) { if (x!=i) nxt[x].push_back(i); for (int j=0; j<g[i].size(); j++) { int nxt=g[i][j]; if (nxt==p) continue; if (d>=e[i][j]) dfs(nxt,i,d-e[i][j]); } } void solve(int i) { u[i]=x; ++res; for (int j: nxt[i]) if (u[j]!=x) solve(j); } int main() { scanf("%d",&n); for (i=1; i<=n; i++) scanf("%lld",&a[i]); for (i=1; i<n; i++) { scanf("%d%d%lld",&x,&y,&z); g[x].push_back(y); e[x].push_back(z); g[y].push_back(x); e[y].push_back(z); } for (x=1; x<=n; x++) dfs(x,0,a[x]); for (x=1; x<=n; x++) { res=0; solve(x); printf("%d ",res); } return 0; } |