社区讨论
玄关求调
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 条回复,欢迎继续交流。
正在加载回复...