题解
2026-02-02 16:02:00
发布于:云南
0阅读
0回复
0点赞
此题很简单,可以用 tarjan 求桥,但我还不会。
可以暴力模拟,使用并查集维护。
代码
#include<bits/stdc++.h>
using namespace std;
const int N=155;
const int M=5005;
int n,m,fa[N];
struct node{
int u,v;
bool operator< (const node &x)const{
if(x.u!=u)return u<x.u;
return v<x.v;
}
}a[M];
vector<node>ans;
void init(){for(int i=1;i<=n;i++)fa[i]=i;}
int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
void check(int x){
init();
for(int i=1;i<=m;i++){
if(i==x)continue;
int fu=find(a[i].u),fv=find(a[i].v);
if(fu!=fv)fa[fu]=fv;
}
int cnt=0;
for(int i=1;i<=n;i++)if(find(i)==i)cnt++;
if(cnt>1)ans.push_back(a[x]);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d",&a[i].u,&a[i].v);
if(a[i].u>a[i].v)swap(a[i].u,a[i].v);
}
sort(a+1,a+m+1);
for(int i=1;i<=m;i++)check(i);
for(auto [u,v]:ans)printf("%d %d\n",u,v);
return 0;
}
这里空空如也


有帮助,赞一个