qwq求调
查看原帖
qwq求调
513590
illuple楼主2023/11/6 21:14
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6;
const int INF=1e9;
int f[maxn],x[maxn],y[maxn],w[maxn],n,ansi=INF,ansa=-1,m,num,ans=INF,r[maxn];
int find(int x) {return x==f[x]?x:f[x]=find(f[x]);}
bool cmp(const int i,const int j){return w[i]<w[j];}
int main()
{
	while(cin>>n>>m&&n&&m)
	{
	int ans=-1;
	cin>>n>>m;num=n;
 	for(int i=0;i<m;++i) {cin>>x[i]>>y[i]>>w[i];r[i]=i;};
 	sort(r,r+m,cmp);
 	int l,R;
 	for(l=0;l<m;++l)
 	{
		num=n;ans=-1;ansa=-1;ansi=INF;
		for(int i=0;i<=n;++i) f[i]=i;
		for(int i=0;i<=l;++i) 
		{
			int e=r[i];int X,Y;
			if((X=find(x[e]))==(Y=find(y[e]))) continue;
			ansa=max(ansa,w[e]);ansi=min(ansi,w[e]);f[X]=Y;num--;
			if(num==1) break;
		}
		for(R=l;R<m;++R)
		{
			int e=r[R];int X,Y;
			if((X=find(x[e]))==(Y=find(y[e]))) continue;
			ansa=max(ansa,w[e]);ansi=min(ansi,w[e]);f[X]=Y;num--;
			if(num==1) break;
		}
		if(num==1) 
		{
			int qwq=ansa-ansi;
			if (ans==-1) ans=qwq;
			else ans=min(ans,qwq);
		}
    }
    cout<<ans<<"\n";
    }
	return 0;
}

2023/11/6 21:14
加载中...