记录编号 464064 评测结果 AAAAA
题目名称 [福州培训2010] 轰炸 最终得分 100
用户昵称 GravatarBaDBoY 是否通过 通过
代码语言 C++ 运行时间 0.000 s
提交时间 2017-10-25 06:33:15 内存使用 0.00 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
#define N 155
int n,m,low[N],dfn[N],tim,Fa[N],cnt;
vector<int> G[N];
void tarjan(int x,int f) {
	Fa[x]=f;
	dfn[x]=low[x]=++tim;
	for(int i=0; i<G[x].size(); ++i) {
		int k=G[x][i];
		if(dfn[k]==-1) {tarjan(k,x); low[x]=min(low[x],low[k]);}
		else if(f!=k) low[x]=min(low[x],dfn[k]);
	}
}
struct EDGE {
	int a,b;
	friend bool operator < (EDGE x,EDGE y) {
		return x.a==y.a?x.b<y.b:x.a<y.a;
	}
} Edge[5005];
void count() {
	tarjan(1,0);
	for(int i=1; i<=n; ++i) {
		int v=Fa[i];
		if(v>0&&low[i]>dfn[v]) {
			int ji=i;
			if(ji>v) swap(ji,v);
			Edge[++cnt].a=ji,Edge[cnt].b=v;
		}
	} sort(Edge+1,Edge+cnt+1);
	for(int i=1; i<=cnt; ++i) printf("%d %d\n",Edge[i].a,Edge[i].b);
}
int Main() {
	freopen("danger.in","r",stdin);
	freopen("danger.out","w",stdout);
	scanf("%d%d",&n,&m);
	memset(dfn,0xff,sizeof(dfn));
	for(int x,y,i=1; i<=m; ++i) {
		scanf("%d%d",&x,&y);
		G[x].push_back(y);
		G[y].push_back(x);
	} count();
	return 0;
}
int hehe=Main();
int main(){;}
/*
6 6
1 2
2 3
2 4
3 5
4 5
5 6
*/