Carus Carl

(Photographs taken from dzj_ppt)

Minimum spanning tree

Kruskal

 

 Code

#include<iostream>
#include<cstdio>
#include<algorithm> 
#define maxn 5000
#define maxm 200000
using namespace std;
int fa[maxn];
struct edge{
    int u,v,w;
}e[maxm];
int n,m;
int u,v;
int ans=0;
void init(){//初始化 
    for(int i=1;i<=n;i++){
        fa[i]=i;
    }
}
int getFa(int x){
    if(x==fa[x]) return x;
    else return fa[x]=getFa(fa[x]);
}
void merge(int x,int y){
    fa[x]=y;
}
bool cmp(edge a,edge b){//结构体比较 
    return a.w<b.w;
} 
int main(){
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        int u,v,w;
        cin>>u>>v>>w;
        E [I] .u = U; 
        E [I] .v = V; 
        E [I] .W = W; 
    } 
    Sort (E + . 1 , E + m + . 1 , CMP); // accordance weight sorting, greedy Thought 
    the init ();
     for ( int I = . 1 ; I <= m; I ++ ) {
         int T1 = getFa (E [I] .u);
         int T2 = getFa (E [I] .v);
         IF (T2! = T1) { 
            Merge (T1, T2);                                                    
            ANS + = E [I] .W; V
        }                  
    } 
    Cout << years;
    return  0 ; 
}

 

Guess you like

Origin www.cnblogs.com/china-mjr/p/11622799.html