POJ 1251 Jungle Roads(Kruskal)

来源:互联网 发布:淘宝茶叶类目 编辑:程序博客网 时间:2024/05/18 02:00

题目链接:
[[kuangbin带你飞]专题六 最小生成树 A - Jungle Roads(http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66965#problem/A)

Kruskal算法求最小生成树

这里写图片描述

题意:

求图的最小生成树,主要注意输入!!
Kruskal算法:并查集+排序

//#include"stdafx.h"#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <cstdlib>using namespace std;struct edge{    int s, e;    int w;}e[100];//边集int n;int cnt = 0;int p[30];//并查集bool cmp(edge a, edge b) { return a.w < b.w;}int find(int x) { return x == p[x] ? x : p[x] = find(p[x]); }//找爹函数int kruskal(){    sort(e, e + cnt, cmp);    int ans = 0;    for (int i = 0; i < cnt; i++)    {        int x = find(e[i].s);        int y = find(e[i].e);        if (x != y)//互相不连通(爹不一样)        {            ans += e[i].w;            p[x] = y;        }    }    return ans;}int main(){    while (cin >>n)    {        if (n == 0) break;        cnt = 0;        for (int i = 0; i < 30; i++) p[i] = i;        for (int i = 0; i < n-1; i++)        {//这个n-1把我坑惨了,wrong了N回!!!细心啊!            char s;            cin >> s;            int k;            cin >> k;            for (int j = 0; j < k;  j++)            {                char end;                int w;                cin >> end>>w;                e[cnt].s = s - 'A';                e[cnt].e = end - 'A';                e[cnt++].w = w;            }                       }        int ans = kruskal();        printf("%d\n", ans);    }    return 0;}
0 0
原创粉丝点击