zoukankan      html  css  js  c++  java
  • 洛谷P3366 【模板】最小生成树

    P3366 【模板】最小生成树

    •  
    • 319通过
    • 791提交
    • 题目提供者HansBug
    • 标签
    • 难度普及-

     提交  讨论  题解  

    最新讨论

    • 里面没有要输出orz的测试点
    • 如果你用Prim写了半天都是W…
    • 题目描述有错

    题目描述

    如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz

    输入输出格式

    输入格式:

    第一行包含两个整数N、M,表示该图共有N个结点和M条无向边。(N<=5000,M<=200000)

    接下来M行每行包含三个整数Xi、Yi、Zi,表示有一条长度为Zi的无向边连接结点Xi、Yi

    输出格式:

    输出包含一个数,即最小生成树的各边的长度之和;如果该图不连通则输出orz

    输入输出样例

    输入样例#1

    4 5

    1 2 2

    1 3 2

    1 4 3

    2 3 4

    3 4 3

    输出样例#1

    7

    说明

    时空限制:1000ms,128M

    数据规模:

    对于20%的数据:N<=5,M<=20

    对于40%的数据:N<=50,M<=2500

    对于70%的数据:N<=500,M<=10000

    对于100%的数据:N<=5000,M<=200000

    样例解释:

                           

    所以最小生成树的总边权为2+2+3=7

    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    int n, m,fa[5010],ans;
    
    int find(int x)
    {
        if (x == fa[x])
            return x;
        else
            return fa[x] = find(fa[x]);
    }
    
    struct node
    {
        int u, v, w;
    }a[200010];
    
    bool cmp(node a, node b)
    {
        return a.w < b.w;
    }
    
    int main()
    {
        scanf("%d%d", &n, &m);
        for (int i = 1; i <= m; i++)
            scanf("%d%d%d", &a[i].u, &a[i].v, &a[i].w);
        sort(a + 1, a + m + 1, cmp);
        for (int i = 1; i <= n; i++)
            fa[i] = i;
        for (int i = 1; i <= m; i++)
        {
            int x = find(a[i].u), y = find(a[i].v);
            if (x != y)
            {
                fa[x] = y;
                ans += a[i].w;
            }
        }
        int temp = find(1);
        for (int i = 2; i <= n; i++)
            if (find(i) != temp)
            {
            printf("orz");
            return 0;
            }
        printf("%d
    ", ans);
        //while (1);
    
        return 0;
    }
  • 相关阅读:
    20170705总结
    20170703总结
    .NET 框架程序使用 Win32 API
    青春 就此别过
    Aptana Studio 2启动时提示 Workspace Cannot Be Created 解决办法
    App_GlobalResources.afvubzdv.resources.dll”--“拒绝访问。“
    c# 一维数组和二维数组的定义几种方式<转>.
    C#中Split分隔字符串的应用(C#、split、分隔、字符串)<转>
    C#操作字符串方法总结<转>
    C# 时间格式大全
  • 原文地址:https://www.cnblogs.com/zbtrs/p/5975134.html
Copyright © 2011-2022 走看看