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
| #include<bits/stdc++.h> #define int long long using namespace std; const int N = 1e5 + 10; typedef pair<int, int> PII; int n, k, a[N]; vector<PII> e[N]; int dfs(int u, int fa, int end, int sum){ if(u == end){ return sum; } for(int i = 0; i < e[u].size(); i++){ int x = e[u][i].first, y = e[u][i].second; if(x == fa) continue; int tmp = dfs(x, u, end, sum + y); if(tmp) return tmp; } return 0; } signed main() { cin>>n>>k; for(int i = 1,u,v,t; i < n; i++){ cin>>u>>v>>t; e[u].push_back({v, t}); e[v].push_back({u, t}); } for(int i = 1; i <= k; i++){ cin>>a[i]; } int sum = 0; for(int i = 2; i <= k; i++){ sum += dfs(a[i-1], -1, a[i], 0); } for(int i = 1; i <= k; i++){ if(i == 1){ cout<<sum - dfs(a[1], -1, a[2], 0)<<" "; }else if(i == k){ cout<<sum - dfs(a[k-1], -1, a[k], 0)<<" "; }else{ cout<<sum-dfs(a[i-1], -1, a[i], 0)-dfs(a[i], -1, a[i+1], 0)+dfs(a[i-1], -1, a[i+1], 0)<<" "; } } return 0; }
|