zoukankan      html  css  js  c++  java
  • cogs 7. 通信线路

    7. 通信线路

    ★★   输入文件:mcst.in   输出文件:mcst.out   简单对比
    时间限制:1.5 s   内存限制:128 MB

    问题描述
    假设要在n个城市之间建立通信联络网,则连通n个城市只需要n-1条线路。这时, 如何在最少经费的前提下建立这个通信网。在每两个城市之间都可以设置—条线路,相应地都要付出一定的经济代价。n个城市之间,最多可能设置n(n- 1)/2条线路,那么,如何在这些可能的线路中选择n-1条,以使总的耗费最少呢?
     
    【输入格式】
    输入文件有若干行
    第一行,一个整数n,表示共有n个城市
    第2--n+1行,每行n个数,分别表示该城市与其它城市之间路线的费用,如果城市间不能建立通信则用-1表示
     
    【输出格式】
    一行,1个整数,表示最少总费用
     
    【输入输出样例】
     
    输入文件
     

    -1 5 -1 -1 -1 -1 
    5 -1 50 -1 -1 10
    -1 50 -1 20 10 -1
    -1 -1 20 -1 60 30
    -1 -1 10 60 -1 100
    -1 10 -1 30 100 -1
     
    输出文件
     
    75
     
    【数据规模】
     
    对于40%的数据,保证有n<100: 
    对于60%的数据,保证有n<256; 
    对于全部的数据,保证有n<=1501。
     
    思路:最小生成树板子。
    错因:存边数组没开2倍。
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define MAXN 2325750
    #define M 2510
    using namespace std;
    int n,tot,fa[M],num,ans;
    struct nond{
        int x,y,z;
    }edge[MAXN];
    int cmp(nond a,nond b){
        return a.z<b.z;
    }
    int find(int x){
        if(fa[x]==x)    return fa[x];
        else return fa[x]=find(fa[x]);
    }
    int main(){
        freopen("mcst.in","r",stdin);
        freopen("mcst.out","w",stdout);
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++){
                int x;
                scanf("%d",&x);
                if(x!=-1){
                    edge[++tot].x=i;
                    edge[tot].y=j;
                    edge[tot].z=x;
                }
            }
        sort(edge+1,edge+1+tot,cmp);
        for(int i=1;i<=n;i++)    fa[i]=i;
        for(int i=1;i<=tot;i++){
            int dx=find(edge[i].x);
            int dy=find(edge[i].y);
            if(dx==dy)    continue;
            fa[dx]=dy;
            num++;
            ans+=edge[i].z;
            if(num==n-1)    break;
        }
        printf("%d",ans);
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    适合新手小白的UI学习路线完整版
    UI设计课程教程分享:Banner的设计和技巧
    UI设计:C4D作品案例分享
    还在凭实力单身吗,那是因为你还没学会这项技术
    PS故障风海报制作技术分享
    你真的了解标签栏设计吗?
    来看看N多设计师笔下的Spider Man
    羡慕女设计师啊,天生色感好!
    43. Multiply Strings
    40. Combination Sum II
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7416297.html
Copyright © 2011-2022 走看看