求最小生成树(kruskal)

859. Kruskal算法求最小生成树 - AcWing题库

AC代码:
 

#include 
#include 
#include 

using namespace std;

const int N = 100010, M = 200010;
int n,m;
int p[N];
struct Edge{
    int a,b,w;
    bool operator <(const Edge &W)const
    {
        return w>n>>m;
    for(int i=0;i>a>>b>>w;
        edges[i]={a,b,w};
    }
    
    int t=kruskal();
    
    if(t==0x3f3f3f3f)cout<<"impossible";
    else cout<

相关解释:

kruskal算法最慢的就是那个排序的过程,其他的是非常快的。算法流程非常的简单,因为有并查集的路径压缩。

1.对所有的边从小到大排序。

2.逐次遍历每条边,如果当前边的两个点不在一个集合,那就把他们两个加到一个集合里面(加的过程中边数要加,权重也要加)。

3.最后判断边数是否为n-1。(如果不是也就是图不是联通的)

这里为什么就是最小生成树呢?因为我们遍历到的边都是最小的,所以总体就是最小的。

你可能感兴趣的:(图论,算法,c++,图论)