Dijkstra+优先队列 模板
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=1e5+;
const ll inf=1e17;
struct node
{
ll dis;
int num,pos;
node() {}
node(ll dis,int num,int pos):dis(dis),num(num),pos(pos) {}
bool operator< (const node& a)const
{
return dis>a.dis;
}
};
struct edge
{
int to,next;
ll z;
} e[maxn*];//双边,无向图,所以乘以2
int head[maxn],cnt;
void add(int x,int y,ll w)// w边值
{
e[cnt].to=y;
e[cnt].z=w;
e[cnt].next=head[x];
head[x]=cnt++;
}
ll dist[maxn][],vis[maxn][]; int n,m,k;
void dijkstra()
{
priority_queue<node>Q;//优先队列
Q.push(node(,,));
while(!Q.empty())
{
node v=Q.top();
Q.pop();
if(vis[v.pos][v.num])
continue;
vis[v.pos][v.num]=;
for(int i=head[v.pos]; ~i; i=e[i].next)
{
int ne=e[i].to;
if(dist[ne][v.num]>v.dis+e[i].z)
{
dist[ne][v.num]=v.dis+e[i].z;
Q.push(node(dist[ne][v.num],v.num,ne));
}
if(v.num<k && v.dis<dist[ne][v.num+])
{
dist[ne][v.num+]=v.dis;
Q.push(node(v.dis,v.num+,ne));
}
}
}
}
void init()//初始化图,有点之间距离为无穷,每个点的标志初始为0,边的条数cnt初始为0
{
for(int i=; i<maxn; i++)
{
head[i]=-;
for(int j=; j<=; j++)
dist[i][j]=inf,vis[i][j]=;
}
cnt=;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&n,&m,&k);
int x,y;
ll z;
init();
for(int i=; i<=m; i++)
{
scanf("%d%d%lld",&x,&y,&z);
add(x,y,z);
}
dist[][]=;
dijkstra();
ll ans=inf;
for(int i=; i<=k; i++)
ans=min(ans,dist[n][i]);
printf("%lld\n",ans); }
return ;
}
参看原博客:https://blog.csdn.net/tianyizhicheng/article/month/2018/09
Dijkstra+优先队列 模板的更多相关文章
- (模板)poj2387(dijkstra+优先队列优化模板题)
题目链接:https://vjudge.net/problem/POJ-2387 题意:给n个点(<=1000),m条边(<=2000),求结点n到结点1的最短路. 思路:dijkstra ...
- 地铁 Dijkstra(优先队列优化) 湖南省第12届省赛
传送门:地铁 思路:拆点,最短路:拆点比较复杂,所以对边进行最短路,spfa会tle,所以改用Dijkstra(优先队列优化) 模板 /******************************** ...
- POJ 1511 - Invitation Cards (dijkstra优先队列)
题目链接:http://poj.org/problem?id=1511 就是求从起点到其他点的最短距离加上其他点到起点的最短距离的和 , 注意路是单向的. 因为点和边很多, 所以用dijkstra优先 ...
- 最短路径---dijkstra算法模板
dijkstra算法模板 http://acm.hdu.edu.cn/showproblem.php?pid=1874 #include<stdio.h> #include<stri ...
- 【bzo1579】拆点+dijkstra优先队列优化+其他优化
题意: n个点,m条边,问从1走到n的最短路,其中有K次机会可以让一条路的权值变成0.1≤N≤10000;1≤M≤500000;1≤K≤20 题解: 拆点,一个点拆成K个,分别表示到了这个点时还有多少 ...
- 【poj 1724】 ROADS 最短路(dijkstra+优先队列)
ROADS Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12436 Accepted: 4591 Description N ...
- POJ-数据结构-优先队列模板
优先队列模板 优先队列是用堆实现的,所以优先队列中的push().pop()操作的时间复杂度都是O(nlogn). 优先队列的初始化需要三个参数,元素类型.容器类型.比较算子. 需要熟悉的优先队列操作 ...
- 图的最短路径算法Dijkstra算法模板
Dijkstra算法:伪代码 //G为图,一般设为全局变量,数组d[u]为原点到达个点的额最短路径, s为起点 Dijkstra(G, d[u], s){ 初始化: for (循环n次){ u = 是 ...
- poj 1511-- Invitation Cards (dijkstra+优先队列)
刚开始想复杂了,一直做不出来,,,其实就是两遍dijkstra+优先队列(其实就是板子题,只要能有个好的板子,剩下的都不是事),做出来感觉好简单...... 题意:有n个车站和n个志愿者,早上每个志愿 ...
随机推荐
- 一张图一个表——CSS选择器总结
CSS选择器总结: (这些表是一张图片^_^) 看底部 完整思维导图图片和表格的下载地址:https://download.csdn.net/download/denlnyyr/10597820 (我 ...
- 宏观看restframework序列化
序列化 序列化意义 web有两种应用模式,一种是前后端不分离,一种是前后端分离,当前后端分离的时候,后端只需要向前端传输数据即可,不需要进行其他的操作,一般如果是中大型公司,都是前后端分离,这也是目前 ...
- 使用CURL实现GET和POST方式请求
/** 使用curl方式实现get或post请求@param $url 请求的url地址@param $data 发送的post数据 如果为空则为get方式请求return 请求后获取到的数据 */f ...
- Mysql数据库报错1264
数据库报错 [Err] 1264 - Out of range value adjusted for column 'ID' at row 1 修改MYSQL下的my.ini, 将 sql-mode= ...
- 大数据:spark集群搭建
创建spark用户组,组ID1000 groupadd -g 1000 spark 在spark用户组下创建用户ID 2000的spark用户 获取视频中文档资料及完整视频的伙伴请加QQ群:9479 ...
- opencv移植(一)cmake安装
原文:https://blog.csdn.net/Guet_Kite/article/details/78667175?utm_source=copy 版权声明:本文为博主原创文章,转载请附上博文链接 ...
- python list内部功能记录
list.append(obj) 在列表末尾添加新的对象 list.count(obj) 统计某个元素在列表中出现的次数 list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用 ...
- 多线程深入理解和守护线程、子线程、锁、queue、evenet等介绍
1.多线程类的继承 import threading import time class MyThreading(threading.Thread): def __init__(self,n): su ...
- 20155315 2017-05-10 《Java程序设计》课堂代码检查
一.教材代码检查-p98 代码要求 修改教材P98 Score2.java, 让执行结果数组填充是自己的学号 代码链接 运行结果截图 二.在IDEA中以TDD的方式对String类和Arrays类进行 ...
- Python:静态方法、类方法、实例方法
1. 静态方法@staticmethod (1)无需自身对象的self参数和自身类的cls参数,可直接通过 类名.方法名 进行调用 (2)Python中并不是真正意义上的静态方法,因为类定义本身就是个 ...