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个整数,表示最少总费用
【输入输出样例】
输入文件
6 -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#include #include #include #include #define N 5000000using namespace std;int n,x,y,z,tot,ans,sum,fa[N];int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-')f=-1; ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0'; ch=getchar();} return x*f; }struct Edge{ int x,y,z;}edge[N];int cmp(Edge a,Edge b){ return a.z