题目描述

**链接: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;
}

天空之城(最小生成树模板题)相关推荐

  1. 最小生成树(模板题:最优布线问题,繁忙的都市,联络员)(C++)

    文章目录 序言 正文 First Promble 最优布线问题 时间限制: 1000 m s 1000 ms 1000ms 空间限制: 262144 K B 262144 KB 262144KB 题目 ...

  2. 最小生成树模板题 P1692

    Description 给出N个顶点.E条边的连通无向简单图,请你完成下列任务: 任务1.求边权和最小的生成树(最小生成树) 任务2.求边权和最大的生成树(最大生成树) 任务3.求最大边最小的生成树( ...

  3. POJ3164 最小树形图 有向图的最小生成树 模板题 朱刘算法 朱永津-刘振宏算法

    Command Network Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 12833   Accepted: 3717 ...

  4. 一起开心2020暑假训练第二周 图论(模板题)

    比赛链接: 文章目录 A HDU 1285 一 B HDU 1863 起 C POJ 2387 开 D POJ 1502 心 E HDU 5922 图 F HDU 2112 论 A HDU 1285 ...

  5. kuangbin 最小生成树专题 - ZOJ - 1586 QS Network (朴素 Prim算法 模板题)

    kuangbin 最小生成树专题 - ZOJ - 1586 QS Network (朴素 Prim算法 模板题) 总题单 week 3 [kuangbin带你飞] 题单 最小生成树 + 线段树 Cli ...

  6. 【HDU - 1102】Constructing Roads (最小生成树裸题模板)

    题干: There are N villages, which are numbered from 1 to N, and you should build some roads such that ...

  7. CSP认证201412-4 最优灌溉[C++题解]:最小生成树裸题、Kruskal算法求最小生成树

    题目分析 来源:acwing 分析:这是一道最小生成树的裸题. 这里默写Kruskal求最小生成树的最小费用的模板. 最小生成树模板请参考笔者的另一篇博文: 最小生成树板子-AcWing 859. K ...

  8. POj 3164 Command Network最小树形图 模板题 朱刘算法

    Command Network After a long lasting war on words, a war on arms finally breaks out between littleke ...

  9. 1488:新的开始(Primt模板题)

    1488:新的开始 时间限制: 1000 ms 内存限制: 65536 KB [题目描述] 发展采矿业当然首先得有矿井,小 FF 花了上次探险获得的千分之一的财富请人在岛上挖了 n 口矿井,但他似乎忘 ...

最新文章

  1. cuSPARSELt开发NVIDIA Ampere结构化稀疏性
  2. Directx11教程(42) 纹理映射(12)-简单的bump mapping
  3. 正定矩阵(用于SVM的Mercer定理)
  4. 阿里云ubuntu软件包镜像源地址
  5. BZOJ 1717 [Usaco2006 Dec]Milk Patterns 产奶的模式(后缀数组)
  6. 保护我方小学生!腾讯游戏全面启用防沉迷规则,每月充值金额有上限
  7. TokenInsight:反映区块链行业整体表现的TI指数较昨日同期上涨3.55%
  8. 贪吃蛇javascript代码_源于Jquery开发贪吃蛇游戏——简单思路分析总结
  9. InnoDB中锁的算法(1)
  10. Spring源码全解
  11. 手机卫星定位系统_如何判断自己的手机是否支持北斗卫星定位功能,如何使用?...
  12. 银河帝国----基地与帝国
  13. 真正优秀的人,更懂得尊重别人
  14. Flowable工作流之查询历史流程信息
  15. 程序猿怎么利用技术挣钱?——python量化实践
  16. Python面试题(三)
  17. 群晖nas使用的端口
  18. 使用CRM客户关系管理系统的好处有哪些?
  19. 无线传输终端 无线通信模块 全网通5G/4G
  20. ps -aux | grep 用法详解

热门文章

  1. MicroStrategy 小技巧 笔记
  2. 更好的Helvetica
  3. 个人使用向7:easypoi EXCEL导入去空格
  4. dlib 基于摄像流检测眨眼次数
  5. 2022-安询杯-复盘
  6. lua 实现四川麻将胡牌算法(附源代码讲解)
  7. 《疯狂动物城》主题曲《TryEverything》中文翻译
  8. PHP接入 paytm的支付 和转账
  9. Python爬取考研张宇老师新浪微博-ajax加载
  10. 联想R520 安装 AS4.4 +apache+mysql+php