POJ1251 Jungle Roads 【最小生成树Prim】
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 19536 | Accepted: 8970 |
Description

The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid money was spent on extra roads between villages some years ago. But the jungle overtakes roads relentlessly, so the large road network is too expensive to maintain. The
Council of Elders must choose to stop maintaining some roads. The map above on the left shows all the roads in use now and the cost in aacms per month to maintain them. Of course there needs to be some way to get between all the villages on maintained roads,
even if the route is not as short as before. The Chief Elder would like to tell the Council of Elders what would be the smallest amount they could spend in aacms per month to maintain roads that would connect all the villages. The villages are labeled A through
I in the maps above. The map on the right shows the roads that could be maintained most cheaply, for 216 aacms per month. Your task is to write a program that will solve such problems.
Input
capitalized. Each data set is completed with n-1 lines that start with village labels in alphabetical order. There is no line for the last village. Each line for a village starts with the village label followed by a number, k, of roads from this village to
villages with labels later in the alphabet. If k is greater than 0, the line continues with data for each of the k roads. The data for each road is the village label for the other end of the road followed by the monthly maintenance cost in aacms for the road.
Maintenance costs will be positive integers less than 100. All data fields in the row are separated by single blanks. The road network will always allow travel between all the villages. The network will never have more than 75 roads. No village will have more
than 15 roads going to other villages (before or after in the alphabet). In the sample input below, the first data set goes with the map above.
Output
time limit.
Sample Input
9
A 2 B 12 I 25
B 3 C 10 H 40 I 8
C 2 D 18 G 55
D 1 E 44
E 2 F 60 G 38
F 0
G 1 H 35
H 1 I 35
3
A 2 B 10 C 40
B 1 C 20
0
Sample Output
216
30
Source
水题。
#include <stdio.h>
#include <string.h> #define maxn 30
#define maxm 160
#define inf 0x3f3f3f3f int n, head[maxn], id, dist[maxn];
struct Node {
int v, dis, next;
} E[maxm];
bool vis[maxn]; void addEdge(int u, int v, int dis) {
E[id].v = v; E[id].dis = dis;
E[id].next = head[u]; head[u] = id++;
} void getMap() {
int u, v, k, dis, i; id = 0;
char ch[2];
memset(head, -1, sizeof(head));
for(i = 1; i < n; ++i) {
scanf("%s%d", ch, &k);
u = ch[0] - 'A';
while(k--) {
scanf("%s%d", ch, &dis);
v = ch[0] - 'A';
addEdge(u, v, dis);
addEdge(v, u, dis);
}
}
} int getNext() {
int i, pos = -1, dis = inf;
for(i = 0; i < n; ++i)
if(!vis[i] && dist[i] < dis) {
dis = dist[i]; pos = i;
}
return pos;
} int Prim() {
int sum = 0, i, u, v;
for(i = 0; i < n; ++i) {
vis[i] = 0; dist[i] = inf;
}
u = 0; dist[u] = 0;
while(u != -1) {
vis[u] = 1; sum += dist[u];
for(i = head[u]; i != -1; i = E[i].next)
if(dist[v = E[i].v] > E[i].dis)
dist[v] = E[i].dis;
u = getNext();
}
return sum;
} void solve() {
printf("%d\n", Prim());
} int main() {
// freopen("stdin.txt", "r", stdin);
while(scanf("%d", &n), n) {
getMap();
solve();
}
return 0;
}
POJ1251 Jungle Roads 【最小生成树Prim】的更多相关文章
- poj 1251 Jungle Roads (最小生成树)
poj 1251 Jungle Roads (最小生成树) Link: http://poj.org/problem?id=1251 Jungle Roads Time Limit: 1000 ...
- POJ 1251 Jungle Roads (prim)
D - Jungle Roads Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Su ...
- HDU1301&&POJ1251 Jungle Roads 2017-04-12 23:27 40人阅读 评论(0) 收藏
Jungle Roads Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 25993 Accepted: 12181 De ...
- HDU 1301Jungle Roads(最小生成树 prim,输入比较特殊)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1301 Jungle Roads Time Limit: 2000/1000 MS (Java/Oth ...
- POJ1251 Jungle Roads(Kruskal)(并查集)
Jungle Roads Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 23882 Accepted: 11193 De ...
- POJ1251 Jungle Roads Kruskal+scanf输入小技巧
Jungle Roads The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign ai ...
- POJ1251 Jungle Roads (最小生成树&Kruskal&Prim)题解
题意: 输入n,然后接下来有n-1行表示边的加边的权值情况.如A 2 B 12 I 25 表示A有两个邻点,B和I,A-B权值是12,A-I权值是25.求连接这棵树的最小权值. 思路: 一开始是在做莫 ...
- POJ1251 Jungle Roads【最小生成树】
题意: 首先给你一个图,需要你求出最小生成树,首先输入n个节点,用大写字母表示各节点,接着说有几个点和它相连,然后给出节点与节点之间的权值.拿第二个样例举例:比如有3个节点,然后接下来有3-1行表示了 ...
- hdu 1301 Jungle Roads 最小生成树
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1301 The Head Elder of the tropical island of Lagrish ...
随机推荐
- hdu1540(线段树)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1540 题意:是一条线上的点,D x是破坏这个点,Q x是表示查询以x所在的最长的连续的点的个数,R是恢 ...
- 新西兰gap year_百度百科
新西兰gap year_百度百科 新西兰gap year Working Holiday Visa,即打工度假签证.它允许旅行者出于补贴旅行费用的目的而在签证颁发国边打工边旅行.用来鼓励双方国家 ...
- Gnu Linux--Ubuntu系统清理项整理
/********************************************************************* * Author : Samson * Date ...
- C++ Primer 学习笔记_98_特殊的工具和技术 --优化内存分配
特殊的工具和技术 --优化内存分配 引言: C++的内存分配是一种类型化操作:new为特定类型分配内存,并在新分配的内存中构造该类型的一个对象.new表达式自己主动执行合适的构造函数来初始化每一个动态 ...
- 忘记root密码时如何重设密码
哈哈,太久没用linux了,把自己的登陆密码给忘了.今天找了下方法如何重设密码以登陆系统. 此文仅以作备忘. 忘记linux密码时,可以使用单用户模式进入linux,修改root密码.1.在linux ...
- OCP-1Z0-051-题目解析-第30题
30. Evaluate the following CREATE TABLE commands: CREATE TABLE orders (ord_no NUMBER(2) CONSTRAINT o ...
- ecshop后台权限增加
1.在后台“推荐管理”里添加“推荐人分成”.“会员分成”两个操作功能以及权限 index.php?act=menu incluedes/inc_priv.php:权限对照表.inc_m ...
- usb host鼠标不能使用原因
linux kernel 3.4.5的板子插入USB鼠标,出现例如以下错误LOG: [ 191.177508] Plug in USB Port2 [ 191.363516] usb 1-1: n ...
- 0当执行游戏xc000007b错误的解决方法
如图所示,这个错误是让很多玩家担心. 出现这个错误,可能是硬件的问题,也可能是软件的问题. 可是.因为硬件引起该问题的概率非常小,而且除了更换硬件之外没有更好的解决方法,因此本文将具体介绍怎样通过软件 ...
- win10无法新建文件夹怎么办 win10右键新建菜单设置方法
有朋友安装了win10系统后发现右键菜单中没有新建项,而平时使用新建 - 文件夹项的机率很高.如何才能恢复桌面右键菜单中的新建项呢? 右键点击桌面空白处,在右键菜单中发现没有新建项: 桌面右键菜单没有 ...