zoukankan      html  css  js  c++  java
  • HDU-1863-畅通工程

    这题就是kruscal,我们最后判断一下是否连通就行了。直接看pre数组,里面有根节点,超过一个就说明不连通,输出问号就可以了。

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    int pre[110], res, m, n;
    
    struct Edge {
        int f, t, c;
        bool operator < (const Edge &a)const {
            return c < a.c;
        }
    } edge[100005];
    
    int find(int x)
    {
        if (pre[x]==x)
            return x;
        return pre[x] = find(pre[x]);
    }
    
    void kruscal()
    {
        res = 0;
        sort(edge, edge + n);
        for (int i = 1; i <= n;i++) {
            int s = find(edge[i].f);
            int e = find(edge[i].t);
            if (s!=e) {
                pre[s] = e;
                res += edge[i].c;
            }
        }
    }
    
    int main()
    {
        while (scanf("%d%d",&n,&m)==2&&n) {
            for (int i = 0;i<=m;i++)
                pre[i] = i;
            for (int i = 1; i <= n;i++)
                scanf("%d%d%d", &edge[i].f, &edge[i].t, &edge[i].c);
            kruscal();
            int flag = 0;
            for (int i = 1; i <= m;i++) {
                if (pre[i]==i)
                    flag++;
            }
            if (flag==1)
                printf("%d
    ", res);
            else
                printf("?
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    项目进展1
    团队项目(百药食坊)介绍
    结对编程—黄金点游戏(庞思瑶&季远琦)
    WC项目
    四则运算
    Week3——Session
    Spring IOC (DI-依赖注入)
    Week2——XML
    Week2——提交表单后后台的工作
    Week1——JavaEE
  • 原文地址:https://www.cnblogs.com/xyqxyq/p/10397197.html
Copyright © 2011-2022 走看看