04

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

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

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

(注意,如果一次性扩展当前点连出去的所有权值 相同的边,是会TLE的,实际上也是没有必要的。)
复杂度:O(k*log(m+k))

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

ccpc20190823的更多相关文章

随机推荐

  1. winform屏蔽鼠标右键

    /// <summary> /// 屏蔽右键 /// </summary> internal class MenuHandler : IContextMenuHandler { ...

  2. 2020.2.21一些python总结

    #字符串前面加r可以防止字符串转义 \也可以防止字符串转义#三引号可以实现输入多行文本#range(start,end,step)#列表 append添加一个元素到末尾 extend 添加一个素组到末 ...

  3. pycharm2018专业版

    https://blog.csdn.net/moshanghuali/article/details/94396935 1 下载Pycharm专业版2018.3.1许多人直接在官网直接下载,默认的都是 ...

  4. ubuntu下安装ant

    背景介绍 最近终于正式开始填补一下自己在web方面的知识漏洞. 而ant则是必不可少的东西了,要问ant的作用是什么,简单的说,这个软件可以用最简单的方法将你的web应用程序部署到服务器上,是不是很强 ...

  5. gitee上传下载代码命令

    在想要下载的文件夹下,鼠标右键,git bash 1.输入git init 进行初始化 2.git remote add origin https://gitee.com/XXXXXXXXXXXXXX ...

  6. 计算机网络(2): http的基础上用SSL或TSL加密

    加密过程具体TCP实现 步骤 1 : 客户端通过发送Client Hello报文开始SSL通信(这里是在TCP的三次握手已经完成的基础上进行的).报文中包含客户端支持的SSL的指定版本.加密组件列表( ...

  7. JVM探秘:jmap生成内存堆转储快照

    本系列笔记主要基于<深入理解Java虚拟机:JVM高级特性与最佳实践 第2版>,是这本书的读书笔记. jmap 命令用来生成内存堆转储快照,一般称为heapdump或dump文件. 除了使 ...

  8. 微服务项目开发学成在线_day01_CMS服务端开发

    05-CMS需求分析-什么是CMS 什么是CMS?CMS (Content Management System)即内容管理系统,不同的项目对CMS的定位不同.CMS有哪些类型? 每个公司对每个项目的C ...

  9. webgis笔记

    3.8(02) .特点:由服务端进行数据管理 开源的GO sever WMS/WCS/WTS 1sever/2engine/3database/4standard 扩展的空间数据库,存矢量.栅格.直接 ...

  10. HTML引入文件/虚拟目录/绝对路径与相对路径

    此篇引见 相对路径和绝对路径的区别 1.绝对路径 使用方法:而绝对路径可以使用“\”或“/”字符作为目录的分隔字符 绝对路径是指文件在硬盘上真正存在的路径.例如 <body backround= ...