图有最小生成树的充要条件:图是可达的
常见表述:从某节点出发可到达其余节点
#include<bits/stdc++.h>
using namespace std;struct edge
{int a,b,w;bool operator<(edge &other){return w<other.w;}
}e[10001];
int n,m;int p[10001];int find(int x)
{if(p[x]!=x)p[x]=find(p[x]);return p[x];
}
int main()
{cin>>n>>m;for(int i=0;i<m;i++){cin>>e[i].a>>e[i].b>>e[i].w;p[i]=i;}for(int i=1;i<=n;i++)p[i]=i;sort(e,e+m);for(int i=0;i<m;i++){int a=e[i].a;int b=e[i].b;a=find(a);b=find(b);if(a!=b){p[a]=b;if(find(1)==find(n)){cout<<e[i].w<<endl;break;}}}
}
注意点:
1.定义的是<,>根据编译器不同可能报错
2.find函数递归进行路径压缩,将所有节点挂载到根节点上。
3.p[a]=b将一棵树的根挂载到另一棵树上。