原文链接:https://www.luogu.com.cn/problem/P1396
AC代码:
#include<iostream>
#include<string.h>
#include<vector>
#include<algorithm>
using namespace std;
int n,m,s,t,flags=0,flagt=0;
int pre[10005];
typedef struct node{
int u,v,w;
}node;
node nod;
vector<node> vec;
int cmp(const node &a,const node &b){
return a.w<b.w;
}
int find(int r){
int x=r;
while(pre[r]!=r){
r=pre[r];
}
while(x!=r){
int y=pre[x];
pre[x]=r;
x=y;
}
return r;
}
void Union(int x,int y){
int fa=find(x);
int fb=find(y);
if(fa!=fb){
pre[fa]=fb;
}
}
int main(){
int i,j;
cin>>n>>m>>s>>t;
for(i=0;i<10005;i++){
pre[i]=i;
}
for(i=0;i<m;i++){
cin>>nod.u>>nod.v>>nod.w;
vec.push_back(nod);
}
sort(vec.begin(),vec.end(),cmp);
for(i=0;i<vec.size();i++){
nod=vec[i];
Union(nod.u,nod.v);
if(nod.u==s||nod.v==s) flags=1;
if(nod.u==t||nod.v==t) flagt=1;
if(flags==1&&flagt==1&&find(s)==find(t)){
cout<<nod.w;break;
}
}
return 0;
}