为什么会RE
查看原帖
为什么会RE
385165
ZeroF楼主2022/7/13 09:09
#include<bits/stdc++.h>
using namespace std;
vector<int>edge[200010];
int a[200010],dep[200010];
bool vis[200010];
int n,k,x,y;
long long ans;
void init(){
	cin>>n>>k;
	cin>>x>>y;
	for(int i=1;i<=n;i++){
		edge[i].clear();
	}
	memset(vis,0,sizeof(vis));
	memset(dep,0,sizeof(dep));
	for(int i=1;i<=k;i++){
		cin>>a[i];
		vis[a[i]]=true;
	}
	for(int i=1;i<n;i++){
		int u,v;
		cin>>u>>v;
		edge[u].push_back(v);
		edge[v].push_back(u);
	}
}
void dfs(int u,int fa){
	dep[u]=dep[fa]+1;
	for(int i=0;i<edge[u].size();i++){
		int v=edge[u][i];
		if(v==fa){
			continue;
		}
		dfs(v,u);
		if(vis[v]){
			vis[u]=true;
		}
	}
}
void dfs1(int u,int fa){
	if(vis[u])ans++;
	for(int i=0;i<edge[u].size();i++){
		int v=edge[u][i];
		if(v==fa||vis[v]==false){
			continue;
		}
		dfs1(v,u);
	}
}
int main(){
	int t;
	cin>>t;
	while(t--){
		init();
		ans=0;
		vis[x]=vis[y]=1;
		dfs(x,0);
		dfs1(x,0);
		ans=(ans-1)*2-(dep[y]-dep[x]);
		cout<<ans<<endl;
	}
	return 0;
}

样例过了,其他OJ上也AC了,为什么不过

2022/7/13 09:09
加载中...