天空之城(最小生成树模板题)
题目描述
**链接:https://ac.nowcoder.com/acm/contest/9986/J
来源:牛客网
天空之城有5个小镇,名字分别为Ada, Aed, Akk, Orz, Apq,他们也有相互的路径长度。
希达早已期盼着天空之城,如今她登上了天空之城,就想走遍天空之城的每一个城市,但是她希望自己走的路的长度越小越好,以节省体力和节约时间。
巴鲁同意了,但由于他是主力(男孩子嘛),需要帮希达计算出走遍所有城市的最短路径长度。
由于天空之城具有魔力,如果希达想再走一次自己之前走过的路,则她可以在这条路上不花费任何时间。
但是天空之城的城市太多了,他实在计算不过来,只得请你来帮帮忙了。**
输入描述
第一行,输入n,q, 表示有n个城市,q条边;
第二行,输入一个名字tmp,表示希达想要从tmp城市开始行走;
接下来q行,每行输入两个名字a,b和一个数字val, 表示a城市与b城市之间的距离为val.(注意可能有重边和自环)
输出描述
帮助巴鲁计算出最短的路径长度,如果无法走遍所有城市,输出“No!”。
样例输入
5 5
Orz
Ada Aed 5
Orz Ada 6
Apq Aed 8
Akk Apq 12
Aed Orz 3
样例输出
28
备注
多组输入输出(以EOF结束),保证数据组数不超过 10 。
1 <= n <= 5000, 1 <= q <= 200000, 1 <= val <= 1e9. 每个城市的名字长度不超过10。
思路
这题的提示在于这句话“由于天空之城具有魔力,如果希达想再走一次自己之前走过的路,则她可以在这条路上不花费任何时间。”由此可以看出需要用到最小生成树来解题。由于题目给的地名是字符串,所以存图的时候需要用到map函数,将字符串与城市编号形成映射。在此附上我的AC代码
#include<iostream>
#include<algorithm>
#include<vector>
#include<map>
#include<string>
using namespace std;
typedef long long ll;struct bian{int u, v, chang;
} a[200010];map<string, int> mp;
string s, s1, s2;int n, m;
int fa[10010];
int find(int x){if(x==fa[x]) return x;return fa[x] = find(fa[x]);
}void merge(int x, int y){fa[find(x)] = find(y);
}bool cmp(bian p, bian q){return p.chang<q.chang;
}int main()
{while(scanf("%d%d", &n, &m)!=EOF){mp.clear();cin >> s;int cnt=0, x;for(int i=1;i<=m;i++){cin >> s1 >> s2 >> x;if(mp.find(s1) == mp.end()) mp[s1] = ++cnt;if(mp.find(s2) == mp.end()) mp[s2] = ++cnt;a[i].chang=x;a[i].u=mp[s1];a[i].v=mp[s2];}for(int i=1;i<=n;i++)fa[i] = i;sort(a+1, a+1+m, cmp);ll ans=0, num=0;for(int i=1;i<=m;i++){if(find(a[i].u)!=find(a[i].v)){merge(a[i].u, a[i].v);ans+=a[i].chang;num++;}}if(num<n-1) printf("No!\n");else printf("%lld\n", ans);}return 0;
}
天空之城(最小生成树模板题)相关推荐
- 最小生成树(模板题:最优布线问题,繁忙的都市,联络员)(C++)
文章目录 序言 正文 First Promble 最优布线问题 时间限制: 1000 m s 1000 ms 1000ms 空间限制: 262144 K B 262144 KB 262144KB 题目 ...
- 最小生成树模板题 P1692
Description 给出N个顶点.E条边的连通无向简单图,请你完成下列任务: 任务1.求边权和最小的生成树(最小生成树) 任务2.求边权和最大的生成树(最大生成树) 任务3.求最大边最小的生成树( ...
- POJ3164 最小树形图 有向图的最小生成树 模板题 朱刘算法 朱永津-刘振宏算法
Command Network Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 12833 Accepted: 3717 ...
- 一起开心2020暑假训练第二周 图论(模板题)
比赛链接: 文章目录 A HDU 1285 一 B HDU 1863 起 C POJ 2387 开 D POJ 1502 心 E HDU 5922 图 F HDU 2112 论 A HDU 1285 ...
- kuangbin 最小生成树专题 - ZOJ - 1586 QS Network (朴素 Prim算法 模板题)
kuangbin 最小生成树专题 - ZOJ - 1586 QS Network (朴素 Prim算法 模板题) 总题单 week 3 [kuangbin带你飞] 题单 最小生成树 + 线段树 Cli ...
- 【HDU - 1102】Constructing Roads (最小生成树裸题模板)
题干: There are N villages, which are numbered from 1 to N, and you should build some roads such that ...
- CSP认证201412-4 最优灌溉[C++题解]:最小生成树裸题、Kruskal算法求最小生成树
题目分析 来源:acwing 分析:这是一道最小生成树的裸题. 这里默写Kruskal求最小生成树的最小费用的模板. 最小生成树模板请参考笔者的另一篇博文: 最小生成树板子-AcWing 859. K ...
- POj 3164 Command Network最小树形图 模板题 朱刘算法
Command Network After a long lasting war on words, a war on arms finally breaks out between littleke ...
- 1488:新的开始(Primt模板题)
1488:新的开始 时间限制: 1000 ms 内存限制: 65536 KB [题目描述] 发展采矿业当然首先得有矿井,小 FF 花了上次探险获得的千分之一的财富请人在岛上挖了 n 口矿井,但他似乎忘 ...
最新文章
- cuSPARSELt开发NVIDIA Ampere结构化稀疏性
- Directx11教程(42) 纹理映射(12)-简单的bump mapping
- 正定矩阵(用于SVM的Mercer定理)
- 阿里云ubuntu软件包镜像源地址
- BZOJ 1717 [Usaco2006 Dec]Milk Patterns 产奶的模式(后缀数组)
- 保护我方小学生!腾讯游戏全面启用防沉迷规则,每月充值金额有上限
- TokenInsight:反映区块链行业整体表现的TI指数较昨日同期上涨3.55%
- 贪吃蛇javascript代码_源于Jquery开发贪吃蛇游戏——简单思路分析总结
- InnoDB中锁的算法(1)
- Spring源码全解
- 手机卫星定位系统_如何判断自己的手机是否支持北斗卫星定位功能,如何使用?...
- 银河帝国----基地与帝国
- 真正优秀的人,更懂得尊重别人
- Flowable工作流之查询历史流程信息
- 程序猿怎么利用技术挣钱?——python量化实践
- Python面试题(三)
- 群晖nas使用的端口
- 使用CRM客户关系管理系统的好处有哪些?
- 无线传输终端 无线通信模块 全网通5G/4G
- ps -aux | grep 用法详解