首页 > 其他 > 详细

Kruscal Template

时间:2014-08-07 13:05:40      阅读:320      评论:0      收藏:0      [点我收藏+]

Kruscal  elimination :

很裸的Kruscal Template(求最小生成树中最长路,即最短路中最长路)

//#pragma comment(linker, "/STACK:16777216") //for c++ Compiler
#include <stdio.h>
#include <iostream>
#include <climits>
#include <cstring>
#include <algorithm>
#define ll long long
using namespace std;

const int INF = 0x3f3f3f3f;
const int MAX = 10500;

int root[MAX],n,m,cnt;
struct Edge{
    int s,e;
    int value;
}edge[MAX];

bool cmp(Edge a, Edge b){
    return a.value < b.value;
}

void init(){
    for(int i = 1; i <= n; ++i)
        root[i] = i;
}

int find(int x){
    return root[x] == x ? x : (root[x] = find(root[x]));
}

void merge(int a,int b){
    if(a < b)
        root[b] = a;
    else
        root[a] = b;
}

void kruskal(){
    int i,j;
    cnt = 0;
    for(i = 1; i <= m; ++i){
        int a = find(edge[i].s);
        int b = find(edge[i].e);
        if(a != b){
            merge(a,b);
            ++cnt;
        }
        if(cnt >= n-1){
            printf("%d\n",edge[i].value);
            break;
        }
    }
}
int main(){
   int i,j;
   while(scanf("%d%d",&n,&m) != EOF){
       for(i = 1; i <= m; ++i)
           scanf("%d%d%d",&edge[i].s,&edge[i].e,&edge[i].value);
       sort(edge + 1, edge + 1 + m, cmp);
       init();
       kruskal();
   }
   return 0;
}

 

Kruscal Template,布布扣,bubuko.com

Kruscal Template

原文:http://www.cnblogs.com/wushuaiyi/p/3896675.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!