zoukankan      html  css  js  c++  java
  • cogs 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。
     
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    
    using namespace std;
    const int N=3000100;
    
    int fa[N>>2],w,js,answer,tot,n;
    struct node{
    	int x,y,dis;
    }E[N];
    
    inline int read()
    {
    	int x=0;int f=1;char c=getchar();
    	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    	while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();
    	return x*f;
    }
    
    inline bool cmp(node a,node b)
    {
    	return a.dis<b.dis;
    }
    
    int getfa(int x)
    {
    	return fa[x]==x?x:fa[x]=getfa(fa[x]);
    }
    
    int main()
    {
    	freopen("mcst.in","r",stdin);
    	freopen("mcst.out","w",stdout);
    	n=read();
    	for(int i=1;i<=n;i++)
    		fa[i]=i;
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=n;j++)
    		{
    			w=read();
    			if(w!=-1&&j>i)
    				E[++js].x=i,
    				E[js].y=j,
    				E[js].dis=w;
    		}
    	sort(E+1,E+js+1,cmp);
    	for(int i=1;i<=js;i++)
    	{
    		int fx=getfa(E[i].x);
    		int fy=getfa(E[i].y);
    		if(fx!=fy)
    		{
    			tot++;
    			fa[fx]=fy;
    			answer+=E[i].dis;
    			if(tot==n-1)
    				break;
    		}
    	}
    	printf("%d",answer);
    	return 0;
    }
    

      

  • 相关阅读:
    js产生随机数函数,js如何生成随机数
    Oracle11g-linux安装
    ORACLE的监听日志太大,客户端无法连接 BUG:9879101
    liunx下oracle链接数超出最大链接数处理方法
    mui中的a标签注意事项
    mui中点击按钮弹出层可供选择数据自动填充
    js中处理对象JSON.stringify()
    eval()函数
    linux常用命令(1)
    centos下载地址
  • 原文地址:https://www.cnblogs.com/lyqlyq/p/7158590.html
Copyright © 2011-2022 走看看