ccpc网赛 hdu6705 path(队列模拟 贪心
http://acm.hdu.edu.cn/showproblem.php?pid=6705
这是比赛前8题过的人数第二少的题,于是就来补了,但感觉并不难啊。。(怕不是签到难度
题意:给个图,给几条路,让你求第k短路,所有路径不限制使用次数。
思路:最短路肯定是最短的那条,第2短就有2种可能,可能是长度第二短的那条,也有可能是接着刚才的最短路继续走(2个还不会,但是先这样拓展),到第3短就真的是2种可能了(例如1,2,9,1+2<9),但是k短路显然最多是由k段拼成(反证法:如果是k+1条,那个把第k+1段扔了就会更小,所以肯定不是最优),所以直接循环max(k)次,第i次循环就把i段拼成的路更新进去就行。可以开优先队列,装路径总长和终点的struct。
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- const int N = 5e4+10;
- struct node{
- ll to,len;
- node(){}
- node(ll a,ll b):to(a),len(b){}
- };
- struct cmp{
- bool operator ()(const node &x,const node &y) const{
- return x.len>y.len;
- }
- };
- bool cmp1(node a,node b){
- return a.len<b.len;
- }
- priority_queue<node,vector<node>,cmp > q0;
- priority_queue<int> q1;
- vector<node> ve[N];
- ll a[N],b[N];
- void init(int n){
- while(!q1.empty()) q1.pop();
- while(!q0.empty()) q0.pop();
- for(int i=1;i<=n;i++) ve[i].clear();
- }
- int main(){
- ios::sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- ll t;
- cin>>t;
- while(t--){
- ll n,m,k;
- cin>>n>>m>>k;
- init(n);
- for(ll i=1;i<=m;i++){
- ll u,v,w;
- cin>>u>>v>>w;
- q0.push({v,w});
- q1.push(w);
- ve[u].push_back(node(v,w));
- }
- for(ll i=1;i<=n;i++){
- sort(ve[i].begin(),ve[i].end(),cmp1);
- }
- ll mx = 0;
- for(ll i=0;i<k;i++){
- cin>>a[i];
- mx = max(mx,a[i]);
- }
- for(ll i=1;i<=mx;i++){
- b[i] = q0.top().len;
- ll x = q0.top().to;
- q0.pop();
- for(int j=0;j<ve[x].size();j++){
- ll y=ve[x][j].to,len=b[i]+ve[x][j].len;
- if(q1.size()==mx){
- if(len>q1.top()) break;
- else{
- q1.pop();
- q1.push(len);
- q0.push({y,len});
- }
- }
- else {
- q1.push(len);
- q0.push({y,len});
- }
- }
- }
- for(ll i=0;i<k;i++) cout<<b[a[i]]<<endl;
- }
- return 0;
- }
ccpc网赛 hdu6705 path(队列模拟 贪心的更多相关文章
- bzoj 2457 [BeiJing2011]双端队列 模拟+贪心
[BeiJing2011]双端队列 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 457 Solved: 203[Submit][Status][D ...
- 2019CCPC网络赛 HDU6705 - path K短路
题意:给出n个点m条边的有向图,问图上第K短路的长度是多少(这里的路可以经过任何重复点重复边). 解法:解法参考https://blog.csdn.net/Ratina/article/details ...
- 2019ccpc网络赛hdu6705 path
path 题目传送门 解题思路 先用vector存图,然后将每个vector按照边的权值从小到大排序.将每个顶点作为起点的边里最短的边存入优先队列.对于存入优先队列的信息,应有边起点,终点,是其起点的 ...
- CCPC网赛,HDU_5832 A water problem
Problem Description Two planets named Haha and Xixi in the universe and they were created ...
- ccpc网赛 hdu6703 array(权值线段树
http://acm.hdu.edu.cn/showproblem.php?pid=6703 大意:给一个n个元素的数组,其中所有元素都是不重复的[1,n]. 两种操作: 将pos位置元素+1e7 查 ...
- python--递归(附利用栈和队列模拟递归)
博客地址:http://www.cnblogs.com/yudanqu/ 一.递归 递归调用:一个函数,调用的自身,称为递归调用 递归函数:一个可以调用自身的函数称为递归函数 凡是循环能干的事,递归都 ...
- 2018 CCPC网络赛
2018 CCPC网络赛 Buy and Resell 题目描述:有一种物品,在\(n\)个地点的价格为\(a_i\),现在一次经过这\(n\)个地点,在每个地点可以买一个这样的物品,也可以卖出一个物 ...
- 树形DP CCPC网络赛 HDU5834 Magic boy Bi Luo with his excited tree
// 树形DP CCPC网络赛 HDU5834 Magic boy Bi Luo with his excited tree // 题意:n个点的树,每个节点有权值为正,只能用一次,每条边有负权,可以 ...
- (四面体)CCPC网络赛 HDU5839 Special Tetrahedron
CCPC网络赛 HDU5839 Special Tetrahedron 题意:n个点,选四个出来组成四面体,要符合四面体至少四条边相等,若四条边相等则剩下两条边不相邻,求个数 思路:枚举四面体上一条线 ...
随机推荐
- TypeScript入门实例
前言 TypeScript是JavaScript的超集,微软公司开发,利用es6语法,实现对js的面向对象编程思想,写代码的时候会像强类型语言一样,指定参数类型.返回值类型,类型不对会报错,但编译后还 ...
- Eclipse Other Projects小问题
Eclipse 不知什么时候多了个 "Other Projects" 文件夹,所有的项目又多了一层目录,如图所示: 虽然对功能没任何影响,但每次打开有些麻烦,多少感觉有些不爽…… ...
- Consul和Kong的实践(一)
Consul和Kong的实践(一) 这一篇先介绍consul集群,以及consul和应用服务的结合使用,下一篇是和kong网关的结合. 一.Consul的集群安装 以其中一台机器为例: mkdir / ...
- 深入理解Apache Kafka
一.介绍 Kafka在世界享有盛名,大部分互联网公司都在使用它,那么它到底是什么呢? Kafka由LinkedIn公司于2011年推出,自那时起功能逐步迭代,目前演变成一个完整的平台级产品,它允许您冗 ...
- 夯实Java基础(十四)——Java8新的日期处理类
1.前言 Java8之前处理日期一直是Java程序员比较头疼的问题,从Java 8之后,Java里面添加了许多的新特性,其中一个最常见也是最实用的便是日期处理的类——LocalDate.LocalDa ...
- Asp.Net Core WebAPI+PostgreSQL部署在Docker中
PostgreSQL是一个功能强大的开源数据库系统.它支持了大多数的SQL:2008标准的数据类型,包括整型.数值值.布尔型.字节型.字符型.日期型.时间间隔型和时间型,它也支持存储二进制的大对像, ...
- 从输入URL到浏览器显示页面发生了哪些事情---个人理解
经典面试题:从输入URL到页面显示发生了哪些事情 以前一直都记不住,这次自己理解了一下 用自己的话总结了一次,不对的地方希望大佬给我指出来 1.主机通过DHCP协议获取客户端的IP地址.子网掩码和DN ...
- Unity进阶之ET网络游戏开发框架 03-Hotfix层启动
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- 查看centos中的用户和用户组和修改密码
查看centos中的用户和用户组 1.用户列表文件: vim /etc/passwd/ 2.用户组列表文件: vim /etc/group 3.查看系统中有哪些用户: cut -d : -f /etc ...
- appium输入法踩坑解决方案-----中文乱码及输入法搜索无法点击
一.appium1.7.1 遇到的坑: 1. 在写安卓的搜索用例脚本时,发现输入内容后,搜索出现在输入法键盘原来的确认位置,定位不到手机自带输入法的"搜索"键: 2. 传入中文搜索 ...