提一个问题
查看原帖
提一个问题
511303
wangzhiyuan123楼主2021/10/28 10:33

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]);
	}
}

为什么啊

2021/10/28 10:33
加载中...