版权声明:请大家斧正,如喜欢的话,为拙见点一个赞吧。 https://blog.csdn.net/qq_39897867/article/details/82024570
题目
https://www.luogu.org/problemnew/show/P1111
解题思路
本题是一道十分正经的 算法,只需要将累加路径总和改为求 即可,然后需要判断是否全部连通。
代码
#include<cstdio>
#include<algorithm>
using namespace std;
struct node{int x,y,w;}a[200011];
int ans,nu,head[100010],n,m,f[100010];
bool cmp(node x,node y){return x.w<y.w;}
int findd(int k) {return f[k]==k?f[k]:f[k]=findd(f[k]);}
int main()
{
scanf("%d%d",&n,&m);
for (int i=1;i<=m;i++)
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].w);
for (int i=1;i<=n;i++) f[i]=i;
sort(a+1,a+m+1,cmp);
for (int i=1;i<=m;i++){
int _x=findd(a[i].x),_y=findd(a[i].y);
if (_x!=_y){ f[_x]=f[_y]; ans=max(ans,a[i].w); nu++; }
}
if (nu==(n-1)) printf("%d",ans); else printf("-1");
}