题目1028:继续畅通工程

来源:互联网 发布:c语言对数函数怎么表示 编辑:程序博客网 时间:2024/06/06 03:08

#include <stdio.h>#include <algorithm>using namespace std;#define N 101 int tree[N];int find(int x){    if (tree[x] == -1) return x;    else    {        int tmp = find(tree[x]);        tree[x] = tmp;        return tmp;    }} struct Edge{    int a, b;    int cost;    int is;    bool operator < (const Edge &A) const    {        return cost < A.cost;    }}; Edge edge[5000]; int main(){    int n;    while (scanf("%d", &n) != EOF&&n != 0)    {        int size = 0;        for (int i = 1; i <= n; i++)            tree[i] = -1;        for (int i = 1; i <= n*(n - 1) / 2; i++)        {            int a, b, cost, is;            scanf("%d %d %d %d", &a, &b, &cost,&is);            if (is == 1)            {                int x = find(a);                int y = find(b);                if (x != y)                    tree[x] = y;            }            else            {                edge[size].a = a;                edge[size].b = b;                edge[size].cost = cost;                size++;            }        }        sort(edge, edge + size-1);        int ans = 0;        for (int i = 0; i < size; i++)        {            int a = find(edge[i].a);            int b = find(edge[i].b);            if (a != b)            {                tree[a] = b;                ans += edge[i].cost;            }        }        printf("%d\n", ans);    }    return 0;}/**************************************************************    Problem: 1028    User: cust123    Language: C++    Result: Accepted    Time:10 ms    Memory:1100 kb****************************************************************/


0 0
原创粉丝点击