CQUPT第十三届ACM网赛 H. 活动图 题解
输入样例
6 7
3 1 4 1 5 9
1 2 7
1 3 11
2 3 13
3 4 1
3 6 19
4 5 20
5 6 1
输出样例
5
我们需要走遍整张图,故求最小生成树即可,想复杂了。
因为我们需要拿完所有的金币且开局带的金币最少,显然只需要过路费对我们的限制最小,找到过路费最少且能走完所有的城市的路就ok了,用过路费当做两个城市的距离求最小生成树即可。
巧妙点在于如何存需要过路费的最大值,如下
#include<bits/stdc++.h>using namespace std;int city[100005];
int n,m;
int getMoney[100005];
int needMoney[100005];struct road{int x;int y;int need;}Roads[100005];bool cmp( road a , road b ){return a.need<b.need;
}int getF( int a ){return a==city[a]?a:city[a]=getF(city[a]); //并查集并且进行路径压缩。
}int main(){cin>>n>>m;//n个城市,m条路for ( int k = 1 ; k <= n ; ++k ){ scanf("%d",&getMoney[k]);city[k] = k; //进过第N个城市获得的金币数,初始化并查集 }for ( int k = 0 ; k < m ; ++k ) scanf("%d%d%d",&Roads[k].x,&Roads[k].y,&Roads[k].need); //输入所有路;sort( Roads , Roads + m , cmp ); for ( int k = 0 ; k < m ; ++k ){int x = getF( Roads[k].x );int y = getF( Roads[k].y );if ( x == y ) continue; //成环needMoney[x] = max( needMoney[x] , Roads[k].need - getMoney[x] );needMoney[y] = max( needMoney[y] , Roads[k].need - getMoney[y] );if ( needMoney[x] > needMoney[y] )swap( x , y );//如果从x走到y比y走到x需要初始金额更多,那么选择小的一个//故我们交换xy,这时从x->y需要的金额较少 getMoney[x] += getMoney[y];//此时你走到x会获得的金币会累加,同时你need的Money也存入了x city[y] = x; //连接两条路//注.这句话与 city[x] = y 不等价//因为你能获取的钱累加到了x上,但事实上你在x与y两点获取的钱是一样的,所以我们用city[y]=x指向//如果用 city[x] = y的话,那么你想取在y出得到的最多的钱也就变成了 needMoney[ getF( y ) ] = needMoney[y] != needMoney[x]; }cout<<needMoney[ getF(1) ]<<endl;//最终整个图被连成了一个树,所以getF(x) x可以为 1-n的任何数 }
CQUPT第十三届ACM网赛 H. 活动图 题解相关推荐
- CQUPT第十三届ACM网赛 C 高次OSU题解
输入样例: 3 3 0.5 0.5 0.5 输出样例: 6.0 (保留一位小数) 代码: #include<bits/stdc++.h>using namespace std;double ...
- CQUPT第十三届ACM网赛 J. 才华横溢 题解
样例输入: 2 2 2 2 4 5 2 3 5 样例输出: 2 5 一丶引入GCD GDC,即最大公约数.便捷求法如下. int GCD(int a,int b){return !a?b:GCD( b ...
- 记第七届ACM校赛-回忆
这一次校赛其实是两个月半之前的事情了---4月29日.那天比赛完之后,自己就想当天写写这一次比赛的事,但是由于那天比赛完之后又马上又赶回家,5个小时的比赛加上2个小时的车程,整个人都觉得很累,所以那天 ...
- 第十三届NENUACM校赛正式赛总结
目录 A B C D E F G H I 这次比赛主要是心态稳定,一直坚持不懈地想把题A掉,运气好就好在有很多思维题,我出的题没有用到高级点的算法. 一个点在于自己潜心研究了一点组合数学,其实并没有比 ...
- 2016山东省第七届ACM省赛总结
好久都没更过了 前段时间真是心态不好 状态也不好 都不打算练了 自己堕落了一阵子 醒悟了 感觉还是应该干些正事 加上去北京旅游(lanqiao)待了几天 心情也好多了 啊 自己太水 还要接着干. 好 ...
- j-甜甜圈(第十三届icpc河南省赛)
照常,上题目:J-甜甜圈_河南省第十三届ICPC大学生程序设计竞赛(重现赛) (nowcoder.com) 这种题,就一眼能看出来直接模拟肯定是不行的了 然后比赛的时候三个人就思考了下人生决定跳过 咳 ...
- 湖南大学第十四届ACM程序设计大赛 H Kuangyeye and hamburgers
链接:https://ac.nowcoder.com/acm/contest/338/H 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- 2016第七届ACM山东省赛
"题目说的是输出编号.输出编号!!" "好,改好了." "交." 最后两分钟再一次提交了代码. no - wrong. 奋战到最后一秒 ...
- 第十三届蓝桥杯大赛JavaB个人赛题题解
最近蓝桥杯出结果了,本人有幸拿到省赛一等奖前列,现在趁着五一有空,发一发个人题解,因为我们学校是线下竞赛,所以代码都在学校的比赛机,只能再根据记忆打一打,不容易,大家要是觉得有帮助就点个赞,哈哈,祝大 ...
最新文章
- STM32开发 -- 蓝牙开发详解(2)
- mysql 亿级_mysql 亿级数据量 ( sum ,group by )的优化
- Python 3.X 要使用urllib.request 来抓取网络资源。转
- 梯度 cv2.sobel_TensorFlow 2.0中连续策略梯度的最小工作示例
- Python之数据加密与解密(hashlib、hmac、random、base64、pycrypto)--转载
- java怎么处理ajax请求,java怎么用ajax请求?jquery ajax请求后台的简单例子
- Bootstrap CSS 编码规范之Class 命名规范
- HDFS伪分布式集群搭建
- 1.2 SQL注入原理-手工联合查询
- mysql读写分离_SpringBoot+MyBatis+MySQL读写分离
- 第一课:OD软件界面基本介绍
- Java常见练习题总结
- Python 中模拟键盘输入
- Unity 脚本中的几种等待方法
- MCAL_VADC配置
- 知名IT企业待遇一览表
- shell命令查阅端口信息_Linux服务器管理Shell经典命令
- mantis系列:Linux系统mantis(bug管理系统)的安装搭建配置
- Java Solr:(一)Solr 简介
- 步进电机步距角精度是什么?