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. PAT Advanced 1106 Lowest Price in Supply Chain (25) [DFS,BFS,树的遍历]

    题目 A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)– everyone in ...

  2. SEO初步学习之新站优化

    新站优化技巧:新站有两个月扶持期,在扶持期间仅做一件事,提交大量优质受众的原创,且内容为不间断,即每天定点定量发布文章,使得蜘蛛对网站形成爬行习惯,新站初期内容为王,优化为辅. 虽说优化为辅,却不可或 ...

  3. iOS 通过有alpha值的图片创建蒙版

    @interface ViewController () @property (nonatomic, weak) IBOutlet UIImageView *imageView; @end @impl ...

  4. HTTP协议PUT与POST

    摘要: PUT是idempotent的方法,而POST不是. 原文:HTTP协议中PUT和POST使用区别 作者:Never-say-Never 有的观点认为,应该用POST来创建一个资源,用PUT来 ...

  5. JS 日期格式化为 2020-11-01 22:33:44 格式

    项目中经常会用到将JS日期格式化输出为 标准格式(2020-11-01 22:33:44)的问题.写个精简版的,代码如下: function formatDate(d){ d = d || new D ...

  6. android implementation 依赖第三方库

    依赖第三方库

  7. macos上命令行查看磁盘序列号

    收集到两种命令行获取方法:(另外https://www.maketecheasier.com/find-mac-serial-number/中还说明了GUI模式下的查看方法) 1.system_pro ...

  8. UML-领域模型-属性

    1.属性预览 2.导出属性是什么? 3.属性使用什么样的数据类型? 常见的数据类型:boolean.Date.String(Text).Integer 其他常见的:SKU.枚举类型等 而在java类中 ...

  9. p2p gossip 结构化 非结构化

    p2p P2P中文名字叫对等网络,网络中节点地位一致.    QQ其实不算P2P,因为QQ利用了中央服务器.   Hbase这样的分布式系统,因为有Hmaster节点,也不算是P2P网络:   cas ...

  10. OutOfMemoryError异常

    1.Java堆溢出 Java堆用于存储对象实例,只要不断地创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,就会在对象数量达到最大堆的容量限制后产生内存溢出异常. ...