5pts code
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,r,q;
vector<int> tr[100005];
int sz[100005],ans[100005];
void dfs(int x,int fa){
sz[x]=1;
int sm=0,sm2=0;
for(int i=0;i<tr[x].size();i++){
if(tr[x][i]==fa) continue;
dfs(tr[x][i],x);
sz[x]+=sz[tr[x][i]];
sm+=sz[tr[x][i]];
sm2=sm2+sz[tr[x][i]]*sz[tr[x][i]];
}
ans[x]=2*sz[x]-1+sm*sm-sm2;
}
main(){
scanf("%d%d%d",&n,&r,&q);
for(int i=1,u,v;i<n;i++){
scanf("%d%d",&u,&v);
tr[u].push_back(v);
tr[v].push_back(u);
}
dfs(r,0);
for(int i=1,x;i<=q;i++){
scanf("%d",&x);
printf("%d\n",ans[x]);
}
}
100pts code
#include<bits/stdc++.h>
using namespace std;
int n,r,q;
vector<int> tr[100005];
int sz[100005],ans[100005];
void dfs(int x,int fa){
sz[x]=1;
int sm=0,sm2=0;
for(int i=0;i<tr[x].size();i++){
if(tr[x][i]==fa) continue;
dfs(tr[x][i],x);
sz[x]+=sz[tr[x][i]];
sm+=sz[tr[x][i]];
sm2=sm2+sz[tr[x][i]]*sz[tr[x][i]];
}
ans[x]=2*sz[x]-1+sm*sm-sm2;
}
main(){
scanf("%d%d%d",&n,&r,&q);
for(int i=1,u,v;i<n;i++){
scanf("%d%d",&u,&v);
tr[u].push_back(v);
tr[v].push_back(u);
}
dfs(r,0);
for(int i=1,x;i<=q;i++){
scanf("%d",&x);
printf("%d\n",ans[x]);
}
}
为什么啊