Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define int long long
- #define SZ(X) (int)(X).size()
- int n, m;
- vector<int> edges[200001];
- int ans[200001];
- int dfs(int u, int pre){
- int cnt = 1;
- ans[u] = 1;
- for(int i = 0; i < SZ(edges[u]); ++i){
- int nxt = edges[u][i];
- if(nxt == pre)continue;
- int val = dfs(nxt, u);
- ans[u] += val * cnt;
- cnt += val;
- }
- ans[u] += cnt * (n-cnt);
- ans[u] = ans[u] * 2 - 1;
- return cnt;
- }
- int32_t main(){
- scanf("%lld", &n);
- for(int i = 1; i < n; ++i){
- int a,b;
- scanf("%lld%lld", &a, &b);
- edges[a].emplace_back(b);
- edges[b].emplace_back(a);
- }
- dfs(1, -1);
- scanf("%lld", &m);
- while(m--){
- int x;
- scanf("%lld", &x);
- printf("%lld ", n*n-ans[x]);
- }
- printf("\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement