码迷,mamicode.com
首页 > 其他好文 > 详细

P3366 kruskal【模板题】

时间:2019-10-26 22:43:32      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:algorithm   ==   初始   return   false   模板   str   turn   返回   

#include <iostream>
#include <algorithm>
using namespace std;
const int maxm=100000;
const int maxn=5000;
int tot;

struct edge{
    int u,v,w;
}e[maxm*2];

int father[maxn];
void make(int n){
    for(int i=0;i<n;i++)    //初始化 
        father[i]=i;    //令每个元素的父亲都是元素本身 
}

int find(int x){
    if(x!=father[x])    //若父亲不为本身,则寻找元素x的祖先 
        father[x]=find(father[x]);    //通过寻找元素x父亲的父亲找到祖先 
    return father[x];            //返回元素x的祖先 
} 

int cmp(edge a,edge b){
    return a.w<b.w;
}

void work(int i){
    tot=tot+e[i].w;
}

bool kruskal(int n,int m){
    int cnt=0;
    make(n);
    sort(e,e+m,cmp);
    for(int i=1;i<=m;i++)
    {
        int u=e[i].u,v=e[i].v;
        if(find(u)!=find(v))
        {
            father[find(u)]=find(v);
            work(i);
            cnt++;
        }
        if(cnt==n-1) break;
    }
    if(cnt!=n-1) return false;
    return true;
}

int main(){
    int N,M;
    cin>>N>>M;
    for(int i=1;i<=M;i++){
        int X,Y,Z;
        cin>>X>>Y>>Z;
        e[i].u=X,e[i].v=Y,e[i].w=Z;
    }
    if(kruskal(N,M)) cout<<tot<<endl;
    else cout<<"orz"<<endl;    
    return 0;
}

 

P3366 kruskal【模板题】

标签:algorithm   ==   初始   return   false   模板   str   turn   返回   

原文地址:https://www.cnblogs.com/kohano/p/11745680.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!