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 ;
}

最新文章

  1. UITabBarController 基本定制
  2. 热烈祝贺华清远见《ARM处理器开发详解》第2版正式出版
  3. struts2 hello world
  4. HTML前端——CSS样式
  5. SQL 分组查询 group by
  6. 2.html5的基本格式
  7. 安装 jdk、tomcat
  8. swift(一)
  9. NtQuerySystemInformation的使用(提供50余种信息)
  10. 自定义JQuery插件之 beforeFocus
  11. 理清JavaScript正则表达式
  12. 数据同步DataX
  13. AU3脚本 记录
  14. git操作详解
  15. mac配置java和maven环境变量
  16. 微信小程序之使用本地接口开发
  17. JVM利器:Serviceability Agent介绍
  18. localStorage,sessionStorage,cookie使用场景和区别
  19. Scala进阶之路-Scala中的Ordered--Ordering
  20. win7系统Oracle数据库本地备份

热门文章

  1. linux上大文件切割成小文件传输
  2. F5双机冗余配置
  3. MDK中在stm32下载出现error:flash download failed “cortex-m3”的问题
  4. Ubuntu Teamviewer安装使用
  5. LinuxC++开发记录(g++)
  6. vscode template中设置不换行
  7. dfs+剪枝 poj1011
  8. 【iOS入门】UITableView加载图片
  9. Prometheus监控系统之入门篇(一)续
  10. zabbix3.4--监控TCP十一种状态