hdu 1102 Constructing Roads Kruscal
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1102
题意:这道题实际上和hdu 1242 Rescue 非常相似,改变了输入方式之后, 本题实际上更适合用Prim来做。 用Kruscal的话要做一些变化。
/*Constructing Roads Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 14983 Accepted Submission(s): 5715 Problem Description
There are N villages, which are numbered from 1 to N, and you should build some roads such that every two villages can connect to each other. We say two village A and B are connected, if and only if there is a road between A and B, or there exists a village C such that there is a road between A and C, and C and B are connected. We know that there are already some roads between some villages and your job is the build some roads such that all the villages are connect and the length of all the roads built is minimum. Input
The first line is an integer N (3 <= N <= 100), which is the number of villages. Then come N lines, the i-th of which contains N integers, and the j-th of these N integers is the distance (the distance should be an integer within [1, 1000]) between village i and village j. Then there is an integer Q (0 <= Q <= N * (N + 1) / 2). Then come Q lines, each line contains two integers a and b (1 <= a < b <= N), which means the road between village a and village b has been built. Output
You should output a line contains an integer, which is the length of all the roads to be built such that all the villages are connected, and this value is minimum. Sample Input
3
0 990 692
990 0 179
692 179 0
1
1 2 Sample Output
179 Source
kicc
*/
//Kruscal
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std; const int maxn = + ;
int u[maxn], v[maxn], r[maxn], w[maxn], p[maxn], n, q, m, map[ + ][ + ]; void init()
{
memset(u, , sizeof(u)); memset(v, , sizeof(v)); memset(w, , sizeof(w));
memset(p, , sizeof(p)); memset(r, , sizeof(r)); memset(map, , sizeof(map));
} int cmp(const int i, const int j)
{
return w[i] < w[j];
} int find(int x)
{
return x == p[x] ? x : p[x] = find(p[x]);
} int Kruscal()
{
int ans = ;
for(int i = ; i <= n; i++) p[i] = i;
for(int i = ; i <= m; i++) r[i] = i;
sort(r, r+m, cmp);
for(int i = ; i < m; i++){
int e = r[i];
int x = find(u[e]), y = find(v[e]);
if(x != y){
ans += w[e];
p[x] = y;
}
}
return ans;
} int main()
{
int a, b;
while(~scanf("%d", &n)){
init();
m = n*(n-)/;
for(int i = ; i <= n; i++)
for(int j = ; j <= n; j++)
scanf("%d", &map[i][j]);
int k = ;
scanf("%d", &q);
for(int i = ; i < q; i++){
scanf("%d%d", &a, &b);
map[a][b] = map[b][a] = ;
}
for(int i = ; i <= n; i++)
for(int j = i+; j <= n; j++){
u[k] = i; v[k] = j; w[k] = map[i][j];
k++;
}
int cnt = Kruscal();
printf("%d\n", cnt);
}
return ;
}
hdu 1102 Constructing Roads Kruscal的更多相关文章
- HDU 1102 Constructing Roads, Prim+优先队列
题目链接:HDU 1102 Constructing Roads Constructing Roads Problem Description There are N villages, which ...
- HDU 1102(Constructing Roads)(最小生成树之prim算法)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1102 Constructing Roads Time Limit: 2000/1000 MS (Ja ...
- hdu 1102 Constructing Roads (Prim算法)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1102 Constructing Roads Time Limit: 2000/1000 MS (Jav ...
- hdu 1102 Constructing Roads (最小生成树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1102 Constructing Roads Time Limit: 2000/1000 MS (Jav ...
- HDU 1102 Constructing Roads (最小生成树)
最小生成树模板(嗯……在kuangbin模板里面抄的……) 最小生成树(prim) /** Prim求MST * 耗费矩阵cost[][],标号从0开始,0~n-1 * 返回最小生成树的权值,返回-1 ...
- HDU 1102 Constructing Roads
Constructing Roads Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDU 1102 Constructing Roads(kruskal)
Constructing Roads There are N villages, which are numbered from 1 to N, and you should build some r ...
- hdu 1102 Constructing Roads(最小生成树 Prim)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1102 Problem Description There are N villages, which ...
- (step6.1.4)hdu 1102(Constructing Roads——最小生成树)
题目大意:输入一个整数n,表示村庄的数目.在接下来的n行中,每行有n列,表示村庄i到村庄 j 的距离.(下面会结合样例说明).接着,输入一个整数q,表示已经有q条路修好. 在接下来的q行中,会给出修好 ...
随机推荐
- JtextField的延时更新
import java.awt.Container;import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.a ...
- Linux内存管理原理 与文件读写 图 相当详细
http://www.cnblogs.com/zhaoyl/p/3695517.html http://www.cnblogs.com/huxiao-tee/p/4657851.html#_label ...
- Android开发数据存储之ContentProvider详解
转载:十二.ContentProvider和Uri详解 一.使用ContentProvider(内容提供者)共享数据 ContentProvider在android中的作用是对外共享数据,也就是说你可 ...
- 实现O(1)获取最大最小值的栈----java
原文:http://blog.csdn.net/sheepmu/article/details/38459165 实现O(1)获取最大最小值的栈和队列----java 一.如何实现包含获取最小值函数的 ...
- Foxit Reader 插件下载
http://www.foxitsoftware.com/Secure_PDF_Reader/addons.php#install 百度云:http://pan.baidu.com/s/1i3DSlv ...
- GridView格式化
<asp:TemplateColumn HeaderText="进出境运输方式"> <ItemTemplate> <%# Eval(" ...
- C#实现万年历(农历、节气、节日、星座、属相、生肖、闰年等)
C# 万年历 农历 节气 节日 星座 星宿 属相 生肖 闰年月 时辰等,代码如下: using System.Collections.Generic; using System.Text; using ...
- Blending(融合)
Src Pixesl: 源像素 : 指的是当前光栅化产生的值 Dst Pixels 目标像素.指的是先前渲染存储在RT中的值 可以用来实现那些效果,诸如水,玻璃 以及其他的,( ...
- 智能 RPC框架 (C++)
RPC中文叫远程函数调用,它是一种通信方式,只是看起来像普通的函数调用. 它包括三个基本要素: 1:服务端注册相应的(服务)函数(用于调用方调用) 2:调用方通过函数调用的方式将一些信息和参数打包到消 ...
- [Java] HashMap详解
转自:http://alex09.iteye.com/blog/539545 HashMap 和 HashSet 是 Java Collection Framework 的两个重要成员,其中 Hash ...