博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ccpc20190823
阅读量:5291 次
发布时间:2019-06-14

本文共 1704 字,大约阅读时间需要 5 分钟。

04

http://acm.hdu.edu.cn/showproblem.php?pid=6705

分析;先把每条边以 形式放进堆,堆按路径权值从小到大排序,然后每次取出堆顶,用v的出边扩展 新的路径。但是一个点的出度可能会非常大(如菊花图),可以发现,将出边排序之后,

每次只需要扩 展当前点最小的出边,和扩展到当前点的边的下一条边即可。堆中需要记录当前结点,当前距离,上一 节点距离,扩展到当前节点时下一条应该扩展的边。

(注意,如果一次性扩展当前点连出去的所有权值 相同的边,是会TLE的,实际上也是没有必要的。)

复杂度:O(k*log(m+k))

#include
#include
#include
#include
#include
using namespace std;typedef long long ll;#define pb push_backconst int M=1e5+5;struct node{ ll cost; int u,id; node(ll costt=0,int uu=0,int idd=0 ){ cost=costt; u=uu; id=idd; } bool operator < ( const node &b)const{ return cost>b.cost; }};#define pli pair
vector
e[M];ll ans[M];int a[M];priority_queue
que;int main(){ int t; scanf("%d",&t); while(t--){ int n,m,q; scanf("%d%d%d",&n,&m,&q); for(int i=0;i<=n;i++) e[i].clear(); while(!que.empty()) que.pop(); for(int i=1;i<=m;i++){ int u,v; ll w; scanf("%d%d%lld",&u,&v,&w); e[u].pb(pli(w,v)); } int maxxk=0; for(int i=1;i<=q;i++){ scanf("%d",&a[i]); maxxk=max(maxxk,a[i]); } for(int i=1;i<=n;i++) sort(e[i].begin(),e[i].end()); for(int i=1;i<=n;i++) if(e[i].size()) que.push(node(e[i][0].first,i,0)); int tot=0; while(!que.empty()){ node now=que.top(); que.pop(); int u=now.u; int id=now.id; ll Cost=now.cost; if(Cost) ans[++tot]=Cost; if(tot==maxxk) break; if(id<(int)e[u].size()-1) que.push(node(Cost-e[u][id].first+e[u][id+1].first,u,id+1)); int v=e[u][id].second; if(e[v].size()) que.push(node(Cost+e[v][0].first,v,0)); } for(int i=1;i<=q;i++) printf("%lld\n",ans[a[i]]); } return 0;}
View Code

 

转载于:https://www.cnblogs.com/starve/p/11403256.html

你可能感兴趣的文章
活久现
查看>>
asp.net mvc中配置全局异常过滤器
查看>>
B/S神思SS628(100)身份证阅读器开发
查看>>
Do What you want
查看>>
IPv6 关于路由器配置静态IPv6路由的命令
查看>>
查看linux 用户登录信息及ip
查看>>
Linux系统测试端口连通性的方法
查看>>
联想think system sr550信息
查看>>
linux系统物理cpu信息查询
查看>>
shell 符号的定义(一)
查看>>
开源网络漏洞扫描软件
查看>>
yum 命令跳过特定(指定)软件包升级方法
查看>>
Python学习笔记(三)——类型与变量
查看>>
比较表变量和临时表
查看>>
为什么判断UITextField判断为空不能用isEqualToString:@""
查看>>
Spring框架的事务管理的分类
查看>>
Mysql Join语法以及性能优化
查看>>
【干货】移动端基础知识技巧总结
查看>>
python高级-面向对象(11)
查看>>
《算法导论》插入排序
查看>>