zoukankan      html  css  js  c++  java
  • 震惊!衡阳市八中一信息老师竟卖肾干这种事情

    Problem I: 八中彩虹桥

    Problem: 八中彩虹桥

    Time Limit: 10 Sec  Memory Limit: 512 MB
    Submit: 29  Solved: 13
    [Submit][Status][Web Board]

    Description

    八中有N个建筑物,从前八中很穷,只有N-1条边连通这N个点。
    不过,现在ZY卖肾赚了巨多钱。
    于是老大决定将八中所有建设物全架彩虹桥连起来,形成一个完全图。
    不过出于对历史的尊敬,老大还是希望这个图的最小生成树仍是从前那N-1条边所组成的。

    Input

    本题为多组数据
     第一行t,表示有t组测试数据
     对于每组数据
     第一行N,表示建筑物的个数N
     2到N行,每行三个整数X,Y,Z;表示X和Y有一条长度为Z的路

    Output

    对于每组数据,输出一个整数,表示修建的所有彩虹桥总长度的最短值。

    Sample Input

    2
    3
    1 2 2
    1 3 3
    4
    1 2 3
    2 3 4
    3 4 5 

    Sample Output

    4
    17

    HINT

    [Submit][Status]
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    int T,i,u,v;
    struct Edge
    {int x,y,val;} e[6001];
    bool operator<(Edge x,Edge y)
    {return x.val<y.val;}
    int n,head[6001],ecnt,fa[6001],s[6001],ans;
    int find(int x)
    {return x==fa[x]?fa[x]:fa[x]=find(fa[x]);}
    int main() {
        scanf("%d",&T);
        while(ans=0,T--) {
            scanf("%d",&n);
            for(i=1; i<n; i++) scanf("%d%d%d",&e[i].x,&e[i].y,&e[i].val);
            sort(e+1,e+n);
            for(i=0; i<=n; i++) fa[i]=i,s[i]=1;
            for(i=1; i<n; i++)
                u=find(e[i].x),v=find(e[i].y),
                u!=v?
                    fa[u]=v,
                    ans+=(e[i].val+1)*(s[u]*s[v]-1),
                    s[v]+=s[u]:0;
            printf("%d
    ",ans);
        }
    }
    
  • 相关阅读:
    Python之面向对象新式类和经典类
    Python之面向对象继承和派生
    Python之面向对象类和对象
    Python之面向对象的程序设计
    Python之面向对象函数式编程
    Python之内置函数
    列表解析与生成器表达式
    03: 交换机基本原理与配置
    02: 网络布线与数制转换
    01:数据封装解封的过程
  • 原文地址:https://www.cnblogs.com/ZhaoChongyan/p/11740398.html
Copyright © 2011-2022 走看看