• NYIST OJ 题目38 布线问题


    最小生成树水题,先按最小生成树做,答案最后加上最小的从第i号楼接线到外界供电设施所需要的费用即可。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    
    const int maxn = 500;
    struct abc{int uu, vv, cc;}node[maxn*(maxn - 1) / 2 + 10];
    int uu[maxn*(maxn - 1) / 2 + 10];
    int vv[maxn*(maxn - 1) / 2 + 10];
    int cc[maxn*(maxn - 1) / 2 + 10];
    int ff[maxn], father[maxn];
    bool cmp(const abc&a, const abc&b) { return a.cc < b.cc; }
    
    int find(int x)
    {
        if (x != father[x]) father[x] = find(father[x]);
        return father[x];
    }
    int main()
    {
        int T;
        scanf("%d", &T);
        while (T--)
        {
            int i, n, m;
            scanf("%d%d", &n, &m);
            for (i = 0; i < m; i++) scanf("%d%d%d", &uu[i], &vv[i], &cc[i]);
            for (i = 0; i < n; i++) scanf("%d", &ff[i]);
            for (i = 0; i <= n; i++) father[i] = i;
            for (i = 0; i < m; i++)
            {
                node[i].uu = uu[i];
                node[i].vv = vv[i];
                node[i].cc = cc[i];
            }
            sort(node, node + m, cmp);
            sort(ff, ff + n);
            int anss = 0;
            for (i = 0; i < m; i++)
            {
                int fu = find(node[i].uu);
                int fv = find(node[i].vv);
                if (fu != fv)
                {
                    father[fu] = fv;
                    anss = anss + node[i].cc;
                }
            }
            printf("%d
    ", anss + ff[0]);
        }
        return 0;
    }
  • 相关阅读:
    创建的第二个随笔
    Jq基础简介
    从VG中去除PV unknown device
    redhat using publicyum
    Oracle 11g 安装文件说明
    WP8教程: 第一个WP8应用(一)
    WP8教程: 第一个WP8应用(二)
    sqlplus 的登录方式
    redhat7 安装oracle11g 缺少pdksh包
    jquery实现一个substr截取字符串的小效果
  • 原文地址:https://www.cnblogs.com/zufezzt/p/4592932.html
Copyright © 2020-2023  润新知