社区讨论

玄关求调

P1656炸铁路参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mhjtgo4p
此快照首次捕获于
2025/11/04 08:14
4 个月前
此快照最后确认于
2025/11/04 08:14
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define N 10005
using namespace std;
int head[N],cnt;
struct Edge{
	int next,to;
}edge[N<<4];
void addEdge(int from,int to){
	edge[cnt].next=head[from];
	edge[cnt].to=to;
	head[from]=cnt++;
}
int dfn[N],low[N],fa[N],v,e,x,y,ti;
void tarjan(int x);
set<pair<int ,int>> cutEdge;
int main(){
	cin>>v>>e;
	memset(head,-1,sizeof(head));
	for(int i=1;i<=e;i++){
		cin>>x>>y;
		addEdge(x,y);
		addEdge(y,x);
	}
	for(int i=1;i<=v;i++){
		if(!dfn[i]){
			tarjan(i);
		}
	}
	for(auto it:cutEdge){
		cout<<it.first<<" "<<it.second<<'\n';
	
	}
	return 0;
}
void tarjan(int x){
	dfn[x]=low[x]=++ti;
	for(int i=head[x];~i;i=edge[i].next){
		int t = edge[i].to;
		if(!dfn[y]){
			fa[y]=x;
			tarjan(y);
			low[x]=min(low[x],low[y]);
			if(dfn[x]<low[y])
				cutEdge.insert(make_pair(x,y));		
		}
		else if(fa[x]!=y)
			low[x]=min(low[x],dfn[y]);
	}
}

回复

1 条回复,欢迎继续交流。

正在加载回复...