本蒟蒻女生tarjan代码求条
查看原帖
本蒟蒻女生tarjan代码求条
998906
Esucu楼主2024/7/14 20:23

只对了第一个
对tarjan了解得不是很透彻,勿喷qwq

#include<bits/stdc++.h>
#define pb push_back
using namespace std;
const int N=5e5+5;
int fa[N],vis[N],n,m,s,ans[N],x,y,ok[N];
struct vv{
	int to,id;
};
vector<int> g[N];
vector<vv> q[N]; 
int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
void dfs(int x,int y){
	vis[x]=1;
	for(int i=0;i<g[x].size();i++){
		int j=g[x][i];
		if(j==y) continue;
		dfs(j,x);
		fa[j]=x;
		for(int k=0;k<q[j].size();k++){
			int v=q[j][k].to;
			if(vis[v]) ans[q[j][k].id]=find(v);
		}
	}
}
int main(){
	scanf("%d%d%d",&n,&m,&s);
	for(int i=1;i<n;i++){
		scanf("%d%d",&x,&y);
		g[x].pb(y); g[y].pb(x);  
	}
	for(int i=1;i<=n;i++) fa[i]=i;
	for(int i=1;i<=m;i++){
		scanf("%d%d",&x,&y);
		ok[i]=(x==y)*x;
		q[x].pb({y,i}); q[y].pb({x,i});
	}
	dfs(s,0);
	for(int i=1;i<=m;i++){
		printf("%d\n",ok[i]?ok[i]:ans[i]);
	}
	return 0; 
}
2024/7/14 20:23
加载中...