zoukankan      html  css  js  c++  java
  • P2126 Mzc家中的男家丁

                 P2126 Mzc家中的男家丁

    题目背景

    mzc与djn的…还没有众人皆知,所以我们要来宣传一下。

    题目描述

    mzc家很有钱(开玩笑),他家有n个男家丁,现在mzc要将她们全都聚集起来(干什么就不知道了)。现在知道mzc与男家丁们互相之间通信的时间,请算出把他们每个人叫到需要的总时间(要重复的哦)。保证能把他们每个人叫到。

    输入输出格式

    输入格式:

    第一行有一个数n,表示有n个男家丁。第二行一个数m表示有m条通信路线。之后m行,每行三个数a[i],b[i],c[i],表示第a[i]个男家丁(或mzc)和第b[i]个男家丁(或mzc)通信需要时间(双向)。ai=0表示mzc。

    输出格式:

    一行,一个数sum,表示把他们每个人叫到需要的总时间。

    输入输出样例

    输入样例#1: 复制
    5
    12
    0 2 15
    2 3 20
    3 5 13
    1 3 29
    0 1 30
    2 4 21
    0 3 23
    5 1 48
    0 4 17
    0 5 27
    1 2 43
    2 5 41
    
    输出样例#1: 复制
    94
    

    说明

    n<=2300

    m<=400000

    思路:最小生成树模板题           难度:普及/提高-

    #include<algorithm>
    #include<cstdio>
    using namespace std;
    int n, m;
    int tot, sum;
    int fa[2305];
    struct nond {
        int u, v, w;
    }e[400005];
    
    int find(int x) {
        return fa[x]==x ? x : fa[x]=find(fa[x]);
    }
    
    bool cmp(nond x, nond y) {
        return x.w < y.w;
    }
    
    int main() {
        scanf("%d%d", &n, &m);
        for(int i = 1; i <= m; i++) scanf("%d%d%d", &e[i].u, &e[i].v, &e[i].w);
        for(int i = 0; i <= n; i++) fa[i] = i;       //Mzc本人是0,所以要从0开始循环
        sort(e+1, e+1+m, cmp);
        for(int i= 1; i <= m; i++) {
            int x = find(e[i].u), y = find(e[i].v);
            if(x == y) continue;
            fa[x] = y;
            tot++;
            sum += e[i].w;
            if(tot == n) break;       //除Mzc外有n个人,所以应有n条边
        }
        printf("%d", sum);
        return 0;
    }
  • 相关阅读:
    使用telnet模拟http请求
    07_Python变量内存地址、小数据池
    04_Linux命令
    03_Linux文件和目录
    06_Python Encoded
    05_Python Format Operation
    04_Python Data Structures
    02_Python基本数据类型
    01_软件开发流程
    03_线性表应用一:栈
  • 原文地址:https://www.cnblogs.com/v-vip/p/8640240.html
Copyright © 2011-2022 走看看