sort
by _不赦_ @ 2017-12-09 09:42:45
```cpp
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=110000;
int n,m,num,x,y,z,ans;
int h[1100],f[1100],a[1100];
bool flag[1100];
struct node{
int x,y,z,next;
};
node data[N*2];
bool cmp(node a,node b){
if(a.z>=b.z)return false;
else return true;
}
bool check(){
for(int i=1;i<=n;i++)if(!flag[i])return false;
return true;
}
int find(int x){
if(a[x]==x)return x;
return a[x]=find(a[x]);
}
bool check1(){
int x1=find(1);
for(int i=1;i<=n;i++){
if(find(a[i])!=x1)return false;
}
return true;
}
int main(){
scanf("%d%d",&n,&m);
num=0;
memset(h,0,sizeof h);
memset(flag,false,sizeof flag);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&x,&y,&z);
flag[x]=true;
flag[y]=true;
data[++num].x=x;
data[num].y=y;
data[num].z=z;
data[num].next=h[x];
h[x]=num;
data[++num].x=y;
data[num].y=x;
data[num].z=z;
data[num].next=h[y];
h[y]=num;
}
if(!check()){
printf("-1");
return 0;
}
sort(data+1,data+1+num,cmp);
for(int i=1;i<=n;i++)a[i]=i;
int flag1=data[1].z;
for(int i=2;i<=num;i++){
if(flag1!=data[i].z){
if(check1()){
printf("%d",flag1);
return 0;
}
flag1=data[i].z;
}
int x1=find(data[i].x);
int y1=find(data[i].y);
if(x1!=y1)a[x1]=data[i].y;
}
return 0;
}
```
by liuqy @ 2017-12-09 14:01:10