求助没有输出
  • 板块P1656 炸铁路
  • 楼主aldzsfs
  • 当前回复7
  • 已保存回复7
  • 发布时间2023/7/29 14:55
  • 上次更新2023/11/3 07:04:12
查看原帖
求助没有输出
958865
aldzsfs楼主2023/7/29 14:55
#include<bits/stdc++.h>
using namespace std;
int n,m,a,b,k,l,t,num,head[200000],low[200000],dfn[200000],f[200000];
struct edge{int next,to;}g[300000];
pair<int,int>ans[200000];
void add(int u,int v){g[++num]=(edge){head[u],v};head[u]=num;}
void dfs(int u,int x){
	low[u]=dfn[u]=++k;
	for(int i=head[u];i;i=g[i].next){
		if(i!=(x^1)){
			int v=g[i].to;
			if(!dfn[v]){
				dfs(v,i);
				low[u]=min(low[u],low[v]);
				if(low[v]>dfn[u])   ans[++t]=make_pair(min(u,v),max(u,v));
			}
			else    low[u]=min(low[u],dfn[v]);
		}
	}
}
int main(){
	cin>>n>>m;
	while(m--)   scanf("%d%d",&a,&b),add(a,b),add(b,a);
	for(int i=1;i<=n;++i)   if(!dfn[i]) dfs(i,-1);
	sort(ans+1,ans+1+t);
	for(int i=1;i<=t;++i)   printf("%d %d\n",ans[i].first,ans[i].second);
	return 0;
}
2023/7/29 14:55
加载中...