P3379求助Tarjan算法#11WA。
  • 板块学术版
  • 楼主Fzrcy
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/7/19 21:00
  • 上次更新2023/10/27 19:26:41
查看原帖
P3379求助Tarjan算法#11WA。
740607
Fzrcy楼主2022/7/19 21:00

求助,#11 WAWA

#include<bits/stdc++.h>
using namespace std;
#define N 1000001
vector < pair <int , int > > e[N];
int tot,h[N],to[N],nt[N];
int n,fa[N];
void add(int u,int v)
{
	nt[++tot]=h[u];
	h[u]=tot;
	to[tot]=v;
}
void add_e(int x,int y,int i)
{
	e[x].push_back(make_pair(y,i));
	e[y].push_back(make_pair(x,i));
}
int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
int d[N],v[N],len[N],lca[N];
void Tarjan(int x,int p)
{
	d[x]=d[p]+1;
	v[x]=1;
	for(int i=h[x],y; i; i=nt[i])
	{
		y=to[i];
		if(v[y])continue;
		Tarjan(y,x);
		fa[y]=x;
	}
	for(int i=0; i<e[x].size(); i++)
	{
		int y=e[x][i].first;
		if(v[y]==2)
		{
			lca[e[x][i].second]=find(y);
		}
	}
	v[x]=2;
}
int m,root;
signed main()
{
	cin>>n>>m>>root;
	for(int i=1; i<=n; i++)fa[i]=i;
	for(int i=1,x,y; i<n; i++)
	{
		cin>>x>>y;
		add(x,y);add(y,x);
	}
	for(int i=1,x,y; i<=m; i++)
	{
		cin>>x>>y;
		add_e(x,y,i);
	}
	Tarjan(root,0);
	for(int i=1; i<=m; i++)
	{
		cout<<lca[i]<<endl;
	}
}
2022/7/19 21:00
加载中...