你可能没有用种类并查集
//每次把最大冲突合并
//这竟然能拿60分??
#include<bits/stdc++.h>
using namespace std;
int fa[200050];
struct node{
int a,b,c;
}e[200050];
bool cmp(node a,node b){
return a.c>b.c;
}
int find(int x){
if(x!=fa[x])fa[x]=find(fa[x]);
return fa[x];
}
int main(){
int n,m;
cin>>n>>m;
for (int i=1;i<=m;i++){
cin>>e[i].a>>e[i].b>>e[i].c;
}
for (int i=1;i<=200005;i++)fa[i]=i;
sort(e+1,e+m+1,cmp);
for (int i=1;i<=m;i++){
if(find(e[i].a)!=find(e[i].b)){
fa[find(e[i].a)]=find(e[i].b);
}
else{
cout<<e[i].c;
return 0;
}
}
cout<<0;
return 0;
}
种类并查集
#include<bits/stdc++.h>
using namespace std;
int fa[200050];
struct node{
int a,b,c;
}e[200050];
bool cmp(node a,node b){
return a.c>b.c;
}
int find(int x){
if(x!=fa[x])fa[x]=find(fa[x]);
return fa[x];
}
int main(){
int n,m;
cin>>n>>m;
for (int i=1;i<=m;i++){
cin>>e[i].a>>e[i].b>>e[i].c;
}
for (int i=1;i<=2*n;i++)fa[i]=i;
sort(e+1,e+m+1,cmp);
for (int i=1;i<=m;i++){
int x=e[i].a,y=e[i].b;
if(find(x)!=find(y)){
fa[find(x)]=find(y+n);
fa[find(y)]=find(x+n);
}
else{
cout<<e[i].c;
return 0;
}
}
cout<<0;
return 0;
}