#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
const int N=10005;
using namespace std;
vector<int>G[N];
int n,m,low[N],dfn[N];
int father[N];
int tim;
void Tarjan(int i,int Father){
    father[i]=Father;
    dfn[i]=low[i]=tim++;
    for(int j=0;j<G[i].size();++j){
        int k=G[i][j];
        if(dfn[k]==-1){
            Tarjan(k,i);
            low[i]=min(low[i],low[k]);
        }
        else if(Father!=k){
            low[i]=min(low[i],dfn[k]);
        }
    }
}
int main(){
    int a,b;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;++i){
        scanf("%d%d",&a,&b);
        G[a].push_back(b);
        G[b].push_back(a);
    }
    memset(dfn,-1,sizeof(dfn));
    memset(father,0,sizeof(father));
    memset(low,-1,sizeof(low));
    Tarjan(1,0);
    for(int i=1;i<=n;++i){
        int v=father[i];
        if(v>0&&low[i]>dfn[v])
        printf("%d %d\n",v,i);
    }
    return 0;
}
posted @ 2019-07-16 12:48  prestige  阅读(88)  评论(0编辑  收藏  举报