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;
    }
  • 相关阅读:
    java设计模式----工厂模式
    使用.Net Core Mvc +SqlSugar +Autofac+AutoMapper+....
    使用 Date 和 SimpleDateFormat 类表示时间
    .Net Core 3.0 IdentityServer4 快速入门02
    .Net Core 3.0 IdentityServer4 快速入门
    微信小程序支付
    微信小程序集成腾讯云 IM SDK
    架构杂谈《十》
    架构杂谈《九》
    架构杂谈《八》
  • 原文地址:https://www.cnblogs.com/v-vip/p/8640240.html
Copyright © 2011-2022 走看看