HDU 1233 还是畅通工程

来源:互联网 发布:sql row_number() over 编辑:程序博客网 时间:2024/06/05 14:12

最小生成树。kruscal算法

#include<stdio.h>#include<algorithm>using namespace std;int root[101];int N, Q, i, j, a, b, d, t, ans;struct road{    int s;    int e;    int d;} edge[5051];bool cmp(road a, road b){    return a.d < b.d;}int find(int a){    while(a != root[a])        a = root[a];    return a;}void merge(int a, int b){    a = find(a);    b = find(b);    if(a != b)        root[b] = a;}int main(){    while(scanf("%d", &N) == 1 && N)    {        for(i = 1; i < 101; i++)            root[i] = i;        t = 0;        int m = N*(N-1)/2;        for(i = 1; i <= m; i++)        {            int a, b, c;            scanf("%d %d %d", &a, &b, &c);            edge[t].s = a;            edge[t].e = b;            edge[t].d = c;            t++;        }        sort(edge, edge+t, cmp);        ans = 0;        for(i = 0; i < t; i++)        {            if(find(edge[i].s) != find(edge[i].e))            {                merge(edge[i].s,edge[i].e);                ans += edge[i].d;            }        }        printf("%d\n", ans);    }}


原创粉丝点击