Code:
#include<bits/stdc++.h>
using namespace std;
inline long long read()
{
int a=0,b=1;
char c=getchar();
while(c>'9'&&c<'0'){if(c=='-')b=-1;c=getchar();}
while(c>='0'&&c<='9'){a=(a<<3)+(a<<1)+(c^48);c=getchar();}
return a*b;
}
inline void write(long long a)
{
if(a<0){putchar('-');a=-a;}
if(a>10)write(a/10);
putchar(a%10+48);
return;
}
struct node{
int x,y,t;
}lu[100000];
int bcj[100010];
int n=read(),m=read();
bool cmp(node a,node b){return a.t<b.t;}
int find(int x)
{
if(x!=bcj[x])return bcj[x]=find(bcj[x]);
return bcj[x]=x;
}
bool pd()
{
int a=find(1);
for(int i=2;i<=n;i++)
{
if(find(i)!=a)return 0;
}
return 1;
}
int main()
{
for(int i=1;i<=m;i++)
{
lu[i].x=read();
lu[i].y=read();
lu[i].t=read();
bcj[i]=i;
}
sort(lu+1,lu+1+m,cmp);
/* puts("");
for(int i=1;i<=m;i++)
{
write(lu[i].x);
putchar(' ');
write(lu[i].y);
putchar(' ');
write(lu[i].t);
puts("");
}*/
for(int i=1;i<=m;i++)
{
int a=find(lu[i].x),b=find(lu[i].y);
if(a!=b)
{
bcj[a]=b;
if(pd())
{
write(lu[i].t);
puts("");
return 0;
}
}
}
puts("-1");
return 0;
}
测试点1:
5 10
3 4 7
2 1 8
5 2 7
4 2 3
1 4 1
2 3 4
1 5 9
1 3 8
5 4 5
5 3 4
4