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

最新文章

  1. Play jQuery with Node.js
  2. 四则运算APP(BUG发掘)
  3. java 16 -11 ArrayList存储自定义对象并增强for遍历
  4. poj1258 Agri-Net 最小生成树
  5. 定位position详解:relative与absolute
  6. SGU 275 To xor or not to xor (高斯消元)
  7. crontab定时任务中文乱码问题
  8. Android-相册效果(图片缩放 自由滑动)
  9. hdu4662MU Puzzle
  10. [BZOJ 1053] [HAOI 2007] 反素数ant
  11. Away3d 骨骼动画优化
  12. eclipse +cvs 的基本使用方法(一)
  13. Java并发编程的艺术读书笔记(2)-并发编程模型
  14. 理解JavaScript中的作用域
  15. netty03(基于4.1.23.Final 版本的案例)
  16. Xamarin是无懈可击还是鸡肋?浅谈对Xamarin的学习
  17. jenkins在windows平台自动化构建代码
  18. 写给Android开发者的混淆使用手册
  19. 最近玩了下linux下的lampp注意一些使用
  20. Jsp获取Java的对象(JavaBean)

热门文章

  1. Spring 核心技术(5)
  2. Spark Streaming自定义Receiver
  3. python 实现爬取网站下所有URL
  4. PythonDay04
  5. Python pip包管理器安装第三方库超时解决方案
  6. 关于asp.net调用gemalto超级狗api的具体实现
  7. 学习Python的相关资料
  8. resolv.conf文件配置相关的案例
  9. pythonday06数据类型(四)
  10. 一个web前端开发者的日常唠叨