10分求助
查看原帖
10分求助
789876
yiwanni楼主2024/8/7 11:24
#include <bits/stdc++.h>
using namespace std;
int n,m,cnt;
int fa[40005];
struct A
{
	int x,y,c;
}zf[100005];
int find(int x)
{
	if(fa[x]==x)return x;
	return fa[x]=find(fa[x]);
}
void ad(int e,int f)
{
    e=find(fa[e]);
    f=find(fa[f]);
    fa[e]=f;
}
bool cmp(A a,A b)
{
	return a.c>b.c;
}
bool check(int x,int y)
{
    x=find(x);
    y=find(y);
    if(x==y) return true;
    return false;
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		fa[i]=i;
		fa[i+n]=i+n;
	}
	for(int i=1;i<=m;i++){
		cin>>zf[i].x>>zf[i].y>>zf[i].c;
	}
	sort(zf+1,zf+m+1,cmp);
	for(int i=1;i<=m;i++){
		  if(check(zf[i].x,zf[i].y)) {
		      cout<<zf[i].c;
		      break;
		  }
        else
        {
            if(!fa[zf[i].x+n]){
            	fa[zf[i].x+n]=zf[i].y;
			} 
            else {ad(fa[zf[i].x+n],zf[i].y);}
            if(!fa[zf[i].y]+n) 
				fa[zf[i].y+n]=zf[i].x;
            else {
				ad(fa[zf[i].y+n],zf[i].x);
			}
        }
	}
	return 0;
}

2024/8/7 11:24
加载中...