AcWing 3245. 地铁修建csp10(4)
原题链接
中等
作者:
YAX_AC
,
2024-11-20 19:09:50
,
所有人可见
,
阅读 4
Kruskal算法
//核心:按边长从小到大枚举边,第一次使得1和n连通的边的长度即为答案
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 100010,M = 400010;
struct Edge
{
int a,b,c;
bool operator<(const Edge &t) const
{
return c<t.c;
}
}e[M];
int n,m;
int p[N];
int find(int x)
{
if(p[x]!=x) p[x] = find(p[x]);
return p[x];
}
int main()
{
cin>>n>>m;
for(int i = 1; i<=n; i++) p[i] = i;
for(int i = 0; i<m; i++)
{
int a,b,c;
cin>>a>>b>>c;
e[i] = {a,b,c};
}
sort(e,e+m);
for(int i = 0; i<m; i++)
{
int a = e[i].a,b = e[i].b;
a = find(a),b = find(b);
if(a!=b)
{
p[a] = b;
if(find(1) == find(n))
{
cout<<e[i].c;
break;
}
}
}
return 0;
}