模板题:洛谷P1656
code:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
typedef pair<int,int> PII;
const int N=200;
vector<PII> edges[N];
vector<PII> ans;
int n,m,dfn[N],low[N],tot;
void tarjan(int u,int last){
dfn[u]=low[u]=++tot;
for(auto &[v,id]:edges[u]){
if(id==last)
continue;
if(!dfn[v]){
tarjan(v,id);
low[u]=min(low[u],low[v]);
if(low[v]>dfn[u]){
ans.push_back({min(v,u),max(v,u)});
}
}
else{
low[u]=min(low[u],dfn[v]);
}
}
}
int main(){
cin.tie(nullptr)->sync_with_stdio(false);
cin>>n>>m;
for(int i=1;i<=m;i++){
int u,v;
cin>>u>>v;
edges[u].push_back({v,i});
edges[v].push_back({u,i});
}
tarjan(1,0);
sort(ans.begin(),ans.end());
for(auto &[a,b]:ans){
cout<<a<<' '<<b<<endl;
}
return 0;
}