60 分,求调
查看原帖
60 分,求调
1543038
dqh_0616楼主2024/11/10 12:33

发现和题解很相似,但就是不对。

#include<bits/stdc++.h>
using namespace std;

int n,m;
struct zf{//罪犯 
	int a,b,c;
}a[20005];
int dr[20005];//敌人
int f[20005];//父

bool cmp(zf a,zf b){
	return a.c>b.c;
}
int find(int x){
	if(f[x]==x)
		return x;
	f[x]=find(f[x]);
	return f[x];
}
void hb(int x,int y){
	x=find(x);
	y=find(y);
	if(x!=y)
		f[x]=y;
	return;
}
int main(){
	
	scanf("%d %d",&n,&m);
	for(int i=1;i<=n;i++)
		f[i]=i;
	for(int i=1;i<=m;i++)
		scanf("%d %d %d",&a[i].a,&a[i].b,&a[i].c);
	
	sort(a+1,a+m+1,cmp);
	
	for(int i=1;i<=m;i++){
		if(find(a[i].a)==find(a[i].b)){
			printf("%d",a[i].c);
			return 0;
		}
		else{
			if(dr[a[i].a]==0)dr[a[i].a]=a[i].b;
			else hb(a[i].b,dr[a[i].a]);
			if(dr[a[i].b]==0)dr[a[i].b]=a[i].a;
			else hb(a[i].a,dr[a[i].b]);
		}
	}
	printf("0");
	return 0;
}
2024/11/10 12:33
加载中...