Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define ll long long int
- #define inf 0x3f3f3f3f
- #define pb push_back
- #define mk make_pair
- #define fi first
- #define se second
- #define ii pair<int, int>
- #define all(x) (x).begin(), (x).end()
- #define N 1000007
- vector<int>adj[N], vt[N];
- int w[N], h[N];
- vector<int>go(int curr){
- if(vt[curr].size())return vt[curr];
- vector<int>v[3], ret;
- for(int i=0; i<adj[curr].size(); i++){
- v[i]=go(adj[curr][i]);
- }
- ret.pb(w[curr]);
- for(int i=0; i<max(v[0].size(), v[1].size()); i++){
- int a=0, b=0;
- if(i<v[0].size())a=v[0][i];
- if(i<v[1].size())b=v[1][i];
- ret.pb(a+b);
- }
- return vt[curr]=ret;
- }
- void go(int curr, int t){
- h[curr]=t;
- for(int i=0; i<adj[curr].size(); i++)go(adj[curr][i], t+1);
- }
- int main(int argc, char const *argv[]){
- ios::sync_with_stdio(false);
- int n, q, ww;
- cin >> n >> q >> ww;
- w[1]=ww;
- for(int i=0; i<n-1; i++){
- int u, v, ww;
- cin >> u >> v >> ww;
- adj[v].pb(u);
- w[u]=ww;
- }
- vt[1]=go(1);
- go(1, 0);
- while(q--){
- int u;
- cin >> u;
- int ans=0, cc=0;
- for(int x=0, i=0; i<vt[1].size(); i++){
- x=0;
- if(i>=h[u] && cc<vt[u].size()) x=vt[u][cc++];
- ans=max(ans, vt[1][i]-x);
- }
- cout << ans << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement