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个点,选四个出来组成四面体,要符合四面体至少四条边相等,若四条边相等则剩下两条边不相邻,求个数 思路:枚举四面体上一条线 ...
随机推荐
- Scrapy框架安装失败解决办法
安装报错信息 正常安装: pip3 install scrapy 出现报错信息如下: 两种解决办法 第一种方法 最根本得解决办法 需要我们安装 Microsoft Visual C++ 14.0 ...
- 记kepServer读写西门子PLC
在程序开发过程中为了测试方法或者验证某个属性的值是否正确 经常通过Kepserver 的 OPC Quick Client来手动置点或者读取点位 例如 这里显示的值都是经过转化后得到的十进制值,那我们 ...
- zmnXAglTcg
#include <map>#include <cmath>#include <stack>#include <queue>#include <l ...
- 的Blog
作者:Ovear链接:https://www.zhihu.com/question/20215561/answer/40316953来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...
- java代码之美(13)--- Predicate详解
java代码之美(13)--- Predicate详解 遇到Predicate是自己在自定义Mybatis拦截器的时候,在拦截器中我们是通过反射机制获取对象的所有属性,再查看这些属性上是否有我们自定义 ...
- 理解MySQL(一)--MySQL介绍
一.Mysql逻辑架构: 1. 第一层:服务器层的服务,连接\线程处理. 2. 第二层:查询执行引擎,MySQL的核心服务功能,包括查询解析.分析.优化和缓存,所有跨存储引擎的功能都在这一层实现. 3 ...
- Zookeeper开源客户端Curator的使用
开源zk客户端-Curator 创建会话: RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000,3); CuratorFramewor ...
- 转载 | Sublime Text3 安装以及初次配置
本文引自:http://blog.csdn.net/u011272513/article/details/52088800 工具:官网下载:Sublime Text3 安装:直接运行安装.http:/ ...
- 基于jmeter+perfmon的稳定性测试记录
1. 引子 最近承接了项目中一些性能测试的任务,因此决定记录一下,将测试的过程和一些心得收录下来. 说起来性能测试算是软件测试行业内,有些特殊的部分.这部分的测试活动,与传统的测试任务差别是比较大的, ...
- 使用idea在linux上启动springboot项目
springboot项目启动方式 1.改成war包放到tomcat上,网上方法很多不再介绍. 2.直接用jar包启动,比较方便,不需要修改项目文件,推荐使用jar包起 将项目和package打成jar ...