并查集一直RE,求调
  • 板块P1656 炸铁路
  • 楼主HUTEHE
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/30 21:50
  • 上次更新2024/8/31 09:55:19
查看原帖
并查集一直RE,求调
1086575
HUTEHE楼主2024/8/30 21:50
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
#define int long long
using namespace std;
using namespace __gnu_pbds;
int fa[2005];
int n,m;
struct node 
{
	int x,y;
}a[5005];
inline bool cmp(node a,node b)
{
	return (a.x==b.x)?(a.y<b.y):(a.x<b.x);
}
inline void init(int n)
{
	for(register int i=1;i<=n;i++)fa[i]=i;
}
inline int find(int i)
{
	if(fa[i]==i)return i;
	else
	{
		fa[i]=find(fa[i]);
		return fa[i];
	}
}
inline void unionn(int x,int y)
{
	int fx=find(x);
	int fy=find(y);
	fa[fx]=fy;
}
signed main()
{
	cin>>n>>m;
	for(register int i=1;i<=m;i++)
	{
		int x,y;
		cin>>x>>y;
		a[i].x=min(x,y);
		a[i].y=max(x,y);
	}
	sort(a+1,a+1+m,cmp);
	for(register int i=1;i<=m;i++)
	{
		bool flag=false;
		init(n);
		for(register int j=1;i<=m;j++)
		{
			if(j!=i)unionn(a[j].x,a[j].y);
		}
		for(register int j=1;j<n;j++)
		{
			if(find(j)!=find(j+1))
			{
				flag=true;
				break;
			}
		}
		if(flag) cout<<a[i].x<<" "<<a[i].y<<endl;
	}
	return 0;
}
2024/8/30 21:50
加载中...