编译的时候显示rank的引用有歧义,本地是可以编译通过
#include<cstdio>
#include<string.h>
#include<algorithm>
using namespace std;
typedef struct hate
{
int a,b,v;
}NODE;
NODE p[100005];
int cmp(NODE a,NODE b)
{
return a.v>b.v;
}
int rank[40005],father[40005];
int find(int x)
{
return father[x]==x?x:(father[x]=find(father[x]));
}
void merge(int i,int j)
{
int x=find(i),y=find(j);
if(rank[x]<=rank[y]) father[x]=y;
else father[y]=x;
if(rank[x]==rank[y]&&x!=y) rank[y]++;
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
memset(rank,1,sizeof(int)*(2*n+2));
for(int i=1;i<=n*2;i++)
{
father[i]=i;
}
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&p[i].a,&p[i].b,&p[i].v);
}
sort(p+1,p+m+1,cmp);
for(int i=1;i<=m;i++)
{
if(find(p[i].a)==find(p[i].b))
{
printf("%d",p[i].v);
return 0;
}
else
{
merge(p[i].a,p[i].b+n);
merge(p[i].b,p[i].a+n);
}
}
printf("0");
return 0;
}