博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU-1301 Jungle Roads
阅读量:4122 次
发布时间:2019-05-25

本文共 1702 字,大约阅读时间需要 5 分钟。

#include 
#include
#include
#include
using namespace std;const int maxn = 75 + 5;int n, pos, m, ans, cnt;struct node{ int op; int ed; int len; bool operator < (const node Next) const { return len < Next.len; }} edge[maxn];int root[30];int Find(int x){ return root[x] == x ? x : root[x] = Find(root[x]);}void Kruskal(){ ans = 0; for(int i = 0; i <= n; i ++) root[i] = i; sort(edge, edge + pos); cnt = 0; for(int i = 0; i < pos; i ++) { int x = Find(edge[i].op); int y = Find(edge[i].ed); if(x != y) { root[y] = x; ans += edge[i].len; cnt ++; } if(cnt == n - 1) break; }}int main(){ while(~scanf("%d", & n) && n) { getchar(); pos = 0; int len; char start, city; for(int i = 0; i < n - 1; i ++) { scanf("%c", & start); scanf("%d", & m); for(int j = 0; j < m; j ++) { getchar(); scanf("%c", & city); scanf("%d", & len); edge[pos].op = start - 'A'; edge[pos].ed = city - 'A'; edge[pos].len = len; pos ++; } getchar(); } Kruskal(); printf("%d\n", ans); } return 0;}

题意:

(摘自 永夜初晗凝碧天)

在相通n个岛屿的所有桥都坏了,要重修,重修每一个桥所用的时间不同,求重修使每个岛屿都间接或直接与其他岛屿相同时所用的的最短时间(只有修完一个桥后才可修下一个桥)。简言之就是求最小生成树。
对于数据,数据输入的第一行n代表岛屿的个数,当为0是结束程序,接着n-1行开始时为这岛屿的编号,用大写字母表示,接着是一个整数m,表示与该岛屿连接的字典序大于该岛屿编号的个数,然后该行输入m对数据,每对数据的第一个字母表示与该岛屿连通的岛屿的编号,第二个数字表示要重修两岛屿之间桥所需要的时间,输出数据见样例及原题。

题解:

简单的Kuskal。注意输入时要滤去空格就行。

转载地址:http://ictpi.baihongyu.com/

你可能感兴趣的文章
facebook库runtime.js
查看>>
vue2.* 中 使用socket.io
查看>>
openlayers安装引用
查看>>
js报错显示subString/subStr is not a function
查看>>
高德地图js API实现鼠标悬浮于点标记时弹出信息窗体显示详情,点击点标记放大地图操作
查看>>
初始化VUE项目报错
查看>>
vue项目使用安装sass
查看>>
HTTP和HttpServletRequest 要点
查看>>
在osg场景中使用GLSL语言——一个例子
查看>>
关于无线PCB中 中50欧姆的特性阻抗的注意事项
查看>>
Spring的单例模式源码小窥
查看>>
后台服务的变慢排查思路(轻量级应用服务器中测试)
查看>>
MySQL中InnoDB事务的默认隔离级别测试
查看>>
微服务的注册与发现
查看>>
bash: service: command not found
查看>>
linux Crontab 使用 --定时任务
查看>>
shell编程----目录操作(文件夹)
查看>>
机器学习-----K近邻算法
查看>>
HBASE安装和简单测试
查看>>
关于程序员的59条搞笑但却真实无比的编程语录
查看>>