J.天空之城

题目链接: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!”。

示例1:

输入
5 5
Orz
Ada Aed 5
Orz Ada 6
Apq Aed 8
Akk Apq 12
Aed Orz 3
输出
28
说明
Ada->Aed->Orz->Aed->Apq->Akk
备注:

多组输入输出(以EOF结束),保证数据组数不超过 10 。

1 <= n <= 5000, 1 <= q <= 200000, 1 <= val <= 1e9. 每个城市的名字长度不超过10。

保证∑q≤200000 。

解题思路:

最小生成树模板题 用map把string转换到数上(map <string, int> mp),然后即是n 个点 m 条边的最小生成树模板题。
最小生成树模板代码:
最小生成树之kruskal算法
最小生成树之prim算法

代码如下:

#include <iostream>
#include<algorithm>
#include<cstdio>
#include<string>
#include<map>
using namespace std;
#define ll long long
map <string, int> mp;
int n,m,cnt=0;
string s;
struct node{int x,y,p;
}a[200010];
int pre[10010];
bool cmp(node a,node b){return a.p<b.p;
}
int find(int x){if(x!=pre[x]){pre[x]=find(pre[x]);}return pre[x];
}
void merge(int x, int y){int fx=find(x),fy=find(y);if(fx!=fy) pre[fy]=fx;
}
int main(){while(scanf("%d%d",&n,&m)!=EOF){mp.clear();cnt=0;cin>>s;for (int i=1;i<=m;i++){string s1,s2;int x;cin>>s1>>s2>>x;if (mp.find(s1)==mp.end()) mp[s1]= ++cnt;if (mp.find(s2)==mp.end()) mp[s2]= ++cnt;a[i].x=mp[s1];a[i].y=mp[s2];a[i].p=x;}sort(a+1,a+1+m,cmp);for (int i=1;i<=n;i++)pre[i]=i;ll ans=0;int num=0;for (int i=1;i<=m;i++){if (find(a[i].x)!=find(a[i].y)){ans+=a[i].p;num++;merge(a[i].x,a[i].y);}}if (num<n-1) printf("No!\n");else printf("%lld\n",ans);}return 0;
}

2021牛客寒假算法基础集训营6 J.天空之城相关推荐

  1. 2021牛客寒假算法基础集训营1 J 一群小青蛙呱蹦呱蹦呱

    今天的比赛没打( 睡午觉去了,今天太累了 晚上来看看题 2021牛客寒假算法基础集训营1 J 一群小青蛙呱蹦呱蹦呱 题目传送门 板子题( 我们知道由唯一分解定理得,若 n=p1α1×p2α2×p3α3 ...

  2. 【解题报告】2021牛客寒假算法基础集训营4

    [解题报告]2021牛客寒假算法基础集训营4 前面的话 A :九峰与签到题 | 模拟 (签到题) B: 武辰延的字符串 | exKMP D :温澈滢的狗狗 | 二分 E: 九峰与子序列 | d p d ...

  3. 2021牛客寒假算法基础集训营1

    2021牛客寒假算法基础集训营1 A. 串(线性DP) B. 括号(构造) E.三棱锥之刻(几何) F. 对答案一时爽(签到) I. 限制不互素对的排列(构造) J. 一群小青蛙呱蹦呱蹦呱 A. 串( ...

  4. 2021牛客寒假算法基础集训营2 D.牛牛与整除分块

    2021牛客寒假算法基础集训营2 D.牛牛与整除分块 题目链接 题目描述 整除分块,又称数论分块.是数论算法中的重要技巧,你可以在各种需要枚举因子的连续求和类问题中见到它的身影.如杜教筛,莫比乌斯反演 ...

  5. 2021牛客寒假算法基础集训营5 B.比武招亲(上)

    2021牛客寒假算法基础集训营5 B.比武招亲(上) 题目链接 题目描述 众所周知,天姐姐只喜欢天下最聪明的人,为了找到这样的人,她决定比武招亲! 只见天姐姐在榜上留下了这样一道问题,谁做出来了就可以 ...

  6. 2021牛客寒假算法基础集训营4

    九峰与签到题 链接:https://ac.nowcoder.com/acm/contest/9984/A 来源:牛客网 题目描述 九峰正在准备一场毒瘤比赛,他是如此毒瘤以致于他想方设法降低通过率,他认 ...

  7. 2021牛客寒假算法基础集训营5 比武招亲(上)(组合数)

    链接:https://ac.nowcoder.com/acm/contest/9985/B 来源:牛客网 题目描述 众所周知,天姐姐只喜欢天下最聪明的人,为了找到这样的人,她决定比武招亲! 只见天姐姐 ...

  8. 2021牛客寒假算法基础集训营3,签到题DGHIJ

    D. Happy New Year!模拟 #include<bits/stdc++.h> using namespace std; int main(){ios::sync_with_st ...

  9. 2021牛客寒假算法基础集训营1 题解

    A.串 题解: dp 三维dp可能更好理解一些. dp[i][j][k]dp[i][j][k]dp[i][j][k]代表长度为iii的字符串,当j=1时代表已经含有u了的字符串的个数,k=1时代表已经 ...

最新文章

  1. Java项目:人事管理系统(java+javaweb+jdbc)
  2. windows10如何删除文件时提示?(回收站--右键属性--显示删除确认对话框)
  3. idea创建maven程序_使用Maven程序集创建漏洞评估工件
  4. 系统盘压缩卷小于可用空间_操作系统中的可用空间管理
  5. SQL Server中SMO备份数据库进度条不显示?
  6. 数值 转换 成 带千位符的数值,且转成大写
  7. linux环境下给文件加密/解密的方法
  8. 深度学习-图解反向传播算法
  9. iOS 技术支持网址
  10. 解决:删除文件时“文件正在使用”不能完成
  11. 【读】自动文摘——预备
  12. 2022年Q1手机银行用户规模达6.5亿,加强ESG个人金融产品创新
  13. python人工智能方向怎么学_如何学习人工智能
  14. oracle取最新一条数据
  15. Sms开源短信及消息转发器,不仅只转发短信,备用机必备神器
  16. 关于IDEL中的全局搜索不显示该有的类的解决办法之一
  17. kafka消费者如何才能从头开始消费某个topic的全量
  18. LintCode 题解 |亚马逊、微软热门题:目的地的最短路径
  19. PDF转换器使用方法分享:Word文件怎么转换成PDF格式
  20. Python分别用迭代/递归的方式实现阶乘

热门文章

  1. 线性回归的PyTorch实现
  2. 手机拍摄实时互联网直播解决方案
  3. 代码审计入门笔记—分析一个旧版本 espcms SQL 注入漏洞
  4. TCP相关技术:重发机制
  5. 微信开发页面请求重发问题
  6. 【光环国际】学好团队管理的4点建议
  7. Lambda And Stream
  8. kaggle lung cancer detection--Full Preprocessing Tuturial(附翻译)
  9. 语义分割 调色板代码
  10. Civil3d—Revit建断层模型技术路线