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;
    }
  • 相关阅读:
    json字符串数组判断其中
    json字符串数组判断其中
    jquery select chosen禁用某一项option
    数据库培训知识
    人员管理模块代码总结2015/8/12整理
    正则表达式在STARLIMS中的应用总结
    控件属性表
    Form-公共代码
    Server-Script公共代码
    Celient-Script公共代码
  • 原文地址:https://www.cnblogs.com/zbtrs/p/5975134.html
Copyright © 2011-2022 走看看