COGS 457. 最优布线问题 解题报告

原创 2016年07月20日 20:16:04

457. 最优布线问题

[问题描述]

学校有n台计算机,为了方便数据传输,现要将它们用数据线连接起来。两台计算机被连接是指它们之间有数据线连接。由于计算机所处的位置不同,因此不同的两台计算机的连接费用往往是不同的。

当然,如果将任意两台计算机都用数据线连接,费用将是相当庞大的。为了节省费用,我们采用数据的间接传输手段,即一台计算机可以间接的通过若干台计算机(作为中转)来实现与另一台计算机的连接。

现在由你负责连接这些计算机,你的任务是使任意两台计算机都连通(不管是直接的或间接的)。

[输入格式] 

输入文件wire.in,第一行为整数n(2<=n<=1500),表示计算机的数目。此后的n行,每行n个整数。第x+1行y列的整数表示直接连接第x台计算机和第y台计算机的费用。


使所有节点都联通,且路径总权值最小,裸的最小生成树。Kruscal水过。


其实正解是Prim……Kruscal会T一个点。然后开O2就A啦~\(≧▽≦)/~

#include<cstdio>
#include<iostream>
#include<algorithm>
#define COGS
using namespace std;
const int maxn=1500*1500+1;//数组,要开足!!!
int m,n,cnt=-1;
int p[1501],w[maxn],r[maxn],u[maxn],v[maxn];
void Init(){
	int x;
	cin>>n;
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			cin>>x;
			if(i<j && x>0){
				cnt++;
				u[cnt]=i;v[cnt]=j;w[cnt]=x;//记录每条边
			}
		}
	}
}
int cmp(const int i,const int j){return w[i]<w[j];}//以权重为关键字排序,便于Kruskal贪心
int find(int x){return p[x]==x?x:p[x]=find(p[x]);}//借助并查集实现的Kruskal
void Kruskal(){
	int ans=0;
	for(int i=0;i<n;i++)p[i]=i;
	for(int i=0;i<n*n;i++)r[i]=i;//初始化
	sort(r,r+(n*n),cmp);
	for(int i=0;i<n*n;i++){
		int e=r[i];int x=find(u[e]);int y=find(v[e]);
		if(x!=y){ans+=w[e];p[x]=y;}//不在同个连通分量,加入MST
	}
	cout<<ans;
}
int main()
{
	ios::sync_with_stdio(false);
	#ifdef COGS
		string FileName="wire";
		freopen((FileName+".in").c_str(),"r",stdin);
		freopen((FileName+".out").c_str(),"w",stdout);
	#endif
	Init();
	Kruskal();
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

The 3n + 1 problem

题目链接 Problem Description Problems in Computer Science are often classified as belonging to a certa...

SDUT 3362-数据结构实验之图论六:村村通公路(最小生成树_prim)

题目地址:SDUT 3362#include #include #include #include #include #include #include #include #inclu...

最优布线问题 解题报告

最优布线问题 题目描述 学校有n台计算机,为了方便数据传输,现要将它们用数据线连接起来。两台计算机被连接是指它们间有数据线连接。由于计算机所处的位置不同,因此不同的两台计算机的连接费用往往是不同的...
  • zzx2015
  • zzx2015
  • 2015年08月11日 17:07
  • 948

[解题报告]《算法竞赛入门经典》基础题Volume 0. Getting Started Uva10055 Uva10071 Uva10300 Uva458 Uva494 Uva490 Uva445 Uva488 Uva489 Uva694 Uva457

我爱A水题...嘿嘿... UVA10055 - Hashmat the Brave Warrior入门题,注意数据类型为longlong即可ude #include using namespace ...
  • swm8023
  • swm8023
  • 2011年06月04日 11:38
  • 2951

CF 457C Elections 解题报告(线段树)

C. Elections time limit per test 2 seconds memory limit per test 256 megabytes inpu...
  • kbdwo
  • kbdwo
  • 2014年08月11日 20:34
  • 679

HDU_1533 Going Home(最优匹配) 解题报告

转载请注明出自cxb:http://blog.csdn.net/cxb569262726 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1533 ...

NOIP2009解题报告(C/C++)(潜伏者)(Hankson的趣味题)(最优贸易)(靶形数独)

NOIP2009解题报告
  • theljt
  • theljt
  • 2017年03月08日 17:00
  • 287

最优贸易解题报告

----------------------------最优贸易是一个n=10^5级的稀疏图,求max{0,w[j]-w[i]}(g[1][i]&&g[i][j]&&g[j][n]).--------...

COGS 2105. [NOIP2015] 信息传递 法一 解题报告

2105. [NOIP2015] 信息传递 【题目描述】 有n个同学(编号为1到n)正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为T...
  • Janis_z
  • Janis_z
  • 2016年07月20日 21:02
  • 302

COGS 621.[NOIP2011] 选择客栈 解题报告

621. [NOIP2011] 选择客栈 【问题描述】 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从1 到n 编号。每家客栈都按照某一种色调进行装饰(总共k 种,用整数0 ~ k-1 表示...
  • Janis_z
  • Janis_z
  • 2016年09月20日 19:23
  • 418
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:COGS 457. 最优布线问题 解题报告
举报原因:
原因补充:

(最多只允许输入30个字)