2021牛客寒假算法基础集训营6 J.天空之城
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.天空之城相关推荐
- 2021牛客寒假算法基础集训营1 J 一群小青蛙呱蹦呱蹦呱
今天的比赛没打( 睡午觉去了,今天太累了 晚上来看看题 2021牛客寒假算法基础集训营1 J 一群小青蛙呱蹦呱蹦呱 题目传送门 板子题( 我们知道由唯一分解定理得,若 n=p1α1×p2α2×p3α3 ...
- 【解题报告】2021牛客寒假算法基础集训营4
[解题报告]2021牛客寒假算法基础集训营4 前面的话 A :九峰与签到题 | 模拟 (签到题) B: 武辰延的字符串 | exKMP D :温澈滢的狗狗 | 二分 E: 九峰与子序列 | d p d ...
- 2021牛客寒假算法基础集训营1
2021牛客寒假算法基础集训营1 A. 串(线性DP) B. 括号(构造) E.三棱锥之刻(几何) F. 对答案一时爽(签到) I. 限制不互素对的排列(构造) J. 一群小青蛙呱蹦呱蹦呱 A. 串( ...
- 2021牛客寒假算法基础集训营2 D.牛牛与整除分块
2021牛客寒假算法基础集训营2 D.牛牛与整除分块 题目链接 题目描述 整除分块,又称数论分块.是数论算法中的重要技巧,你可以在各种需要枚举因子的连续求和类问题中见到它的身影.如杜教筛,莫比乌斯反演 ...
- 2021牛客寒假算法基础集训营5 B.比武招亲(上)
2021牛客寒假算法基础集训营5 B.比武招亲(上) 题目链接 题目描述 众所周知,天姐姐只喜欢天下最聪明的人,为了找到这样的人,她决定比武招亲! 只见天姐姐在榜上留下了这样一道问题,谁做出来了就可以 ...
- 2021牛客寒假算法基础集训营4
九峰与签到题 链接:https://ac.nowcoder.com/acm/contest/9984/A 来源:牛客网 题目描述 九峰正在准备一场毒瘤比赛,他是如此毒瘤以致于他想方设法降低通过率,他认 ...
- 2021牛客寒假算法基础集训营5 比武招亲(上)(组合数)
链接:https://ac.nowcoder.com/acm/contest/9985/B 来源:牛客网 题目描述 众所周知,天姐姐只喜欢天下最聪明的人,为了找到这样的人,她决定比武招亲! 只见天姐姐 ...
- 2021牛客寒假算法基础集训营3,签到题DGHIJ
D. Happy New Year!模拟 #include<bits/stdc++.h> using namespace std; int main(){ios::sync_with_st ...
- 2021牛客寒假算法基础集训营1 题解
A.串 题解: dp 三维dp可能更好理解一些. dp[i][j][k]dp[i][j][k]dp[i][j][k]代表长度为iii的字符串,当j=1时代表已经含有u了的字符串的个数,k=1时代表已经 ...
最新文章
- Java项目:人事管理系统(java+javaweb+jdbc)
- windows10如何删除文件时提示?(回收站--右键属性--显示删除确认对话框)
- idea创建maven程序_使用Maven程序集创建漏洞评估工件
- 系统盘压缩卷小于可用空间_操作系统中的可用空间管理
- SQL Server中SMO备份数据库进度条不显示?
- 数值 转换 成 带千位符的数值,且转成大写
- linux环境下给文件加密/解密的方法
- 深度学习-图解反向传播算法
- iOS 技术支持网址
- 解决:删除文件时“文件正在使用”不能完成
- 【读】自动文摘——预备
- 2022年Q1手机银行用户规模达6.5亿,加强ESG个人金融产品创新
- python人工智能方向怎么学_如何学习人工智能
- oracle取最新一条数据
- Sms开源短信及消息转发器,不仅只转发短信,备用机必备神器
- 关于IDEL中的全局搜索不显示该有的类的解决办法之一
- kafka消费者如何才能从头开始消费某个topic的全量
- LintCode 题解 |亚马逊、微软热门题:目的地的最短路径
- PDF转换器使用方法分享:Word文件怎么转换成PDF格式
- Python分别用迭代/递归的方式实现阶乘