大佬们QAQ,玄学RE60p求助
查看原帖
大佬们QAQ,玄学RE60p求助
93485
AzukaVictor楼主2021/10/21 22:02
#include<bits/stdc++.h>
using namespace std;
int n,m,head[500005],head2[500005],cnt,fa[500005],vis[500005],s,ans[500005],cnt2;
struct edge
{
	int to;
	int next;
	int val;
}e[500005],e2[500005];
void add2(int x,int y,int z)
{
	cnt2++;
	e2[cnt2].val=z;
	e2[cnt2].to=y;
	e2[cnt2].next=head2[x];
	head2[x]=cnt2;
}
void add(int x,int y)
{
	cnt++;
	e[cnt].to=y;
	e[cnt].next=head[x];
	head[x]=cnt;
}
int find(int x)
{
	if(fa[x]!=x) fa[x]=find(fa[x]);
	return fa[x];
}
void Tarjan(int x)
{
	vis[x]=1;
	//cout<<"in"<<endl;
	for(int i=head[x];i;i=e[i].next)
	{
		if(vis[e[i].to]==1) continue;
		Tarjan(e[i].to);
		fa[e[i].to]=x;
		
	}
	for(int i=head2[x];i;i=e2[i].next)
	{
		if(vis[e2[i].to]==1)
		{
			ans[e2[i].val]=find(e2[i].to);
		}
	}
}
int main()
{
	cin>>n>>m>>s;
	for(int i=1;i<=n;i++)
	{
		fa[i]=i;
	}
	for(int i=1;i<=n-1;i++)
	{
		int a,b;
		cin>>a>>b;
		add(a,b);add(b,a);
	}
	for(int i=1;i<=m;i++)
	{
		int a,b;
		cin>>a>>b;
		add2(a,b,i);add2(b,a,i);
	}
	Tarjan(s);
	for(int i=1;i<=m;i++)
	cout<<ans[i]<<endl;
	return 0;
}
2021/10/21 22:02
加载中...