(模板)poj2387(dijkstra+优先队列优化模板题)
题目链接:https://vjudge.net/problem/POJ-2387
题意:给n个点(<=1000),m条边(<=2000),求结点n到结点1的最短路。
思路:dijkstra优先队列,复杂度O(nlogn)。
AC代码:
- #include<cstdio>
- #include<queue>
- #include<algorithm>
- using namespace std;
- const int maxn=1e3+;
- const int inf=0x3f3f3f3f;
- int m,n,cnt,head[maxn],dis[maxn],vis[maxn];
- typedef pair<int,int> PII;
- priority_queue<PII,vector<PII>,greater<PII> > pq;
- struct node{
- int v,w,nex;
- }edge[maxn<<];
- void adde(int u,int v,int w){
- edge[++cnt].v=v;
- edge[cnt].w=w;
- edge[cnt].nex=head[u];
- head[u]=cnt;
- }
- void dijkstra(){
- pq.push(make_pair(,n));
- for(int i=;i<=n;++i)
- dis[i]=inf;
- dis[n]=;
- int num=;
- while(!pq.empty()&&num<=n){
- int d=pq.top().first,u=pq.top().second;
- pq.pop();
- if(vis[u]) continue;
- vis[u]=;
- ++num;
- for(int i=head[u];i;i=edge[i].nex){
- int v=edge[i].v,w=edge[i].w;
- if(!vis[v]&&dis[v]>dis[u]+w){
- dis[v]=dis[u]+w;
- pq.push(make_pair(dis[v],v));
- }
- }
- }
- }
- int main(){
- scanf("%d%d",&m,&n);
- for(int i=;i<=m;++i){
- int u,v,w;
- scanf("%d%d%d",&u,&v,&w);
- adde(u,v,w);
- adde(v,u,w);
- }
- dijkstra();
- printf("%d\n",dis[]);
- return ;
- }
(模板)poj2387(dijkstra+优先队列优化模板题)的更多相关文章
- 最短路--dijkstra+优先队列优化模板
不写普通模板了,还是需要优先队列优化的昂 #include<stdio.h> //基本需要的头文件 #include<string.h> #include<queue&g ...
- Dijkstra + 优先队列优化 模板
#include <cstdio> #include <cstring> #include <queue> #include <vector> #inc ...
- 地铁 Dijkstra(优先队列优化) 湖南省第12届省赛
传送门:地铁 思路:拆点,最短路:拆点比较复杂,所以对边进行最短路,spfa会tle,所以改用Dijkstra(优先队列优化) 模板 /******************************** ...
- hdu 2544 单源最短路问题 dijkstra+堆优化模板
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- 【bzo1579】拆点+dijkstra优先队列优化+其他优化
题意: n个点,m条边,问从1走到n的最短路,其中有K次机会可以让一条路的权值变成0.1≤N≤10000;1≤M≤500000;1≤K≤20 题解: 拆点,一个点拆成K个,分别表示到了这个点时还有多少 ...
- 晴天小猪历险记之Hill(Dijkstra优先队列优化)
描述 这一天,他来到了一座深山的山脚下,因为只有这座深山中的一位隐者才知道这种药草的所在.但是上山的路错综复杂,由于小小猪的病情,晴天小猪想找一条需时最少的路到达山顶,但现在它一头雾水,所以向你求助. ...
- 最短路模板[spfa][dijkstra+堆优化][floyd]
借bzoj1624练了一下模板(虽然正解只是floyd) spfa: #include <cstdio> #include <cstring> #include <alg ...
- 最小生成树--prim+优先队列优化模板
prim+优先队列模板: #include<stdio.h> //大概要这些头文件 #include<string.h> #include<queue> #incl ...
- Luogu P4779 【模板】单源最短路径(标准版)(Dijkstra+堆优化模板)
qwq dij其实和prim挺像的,prim是找权值最小点,dij是找边, 用一个优先队列就可以在加入边的时候直接排序,避免了每次遍历更新min priority_queue <pair< ...
随机推荐
- BigDecimal 3个toString()方法区别
BigDecimal 的toEngineeringString.toPlainString和toString方法的区别: toEngineeringString:有必要时使用工程计数法.工程记数法是一 ...
- v-for为什么要加key,能用index作为key么
前言 在vue中使用v-for时,一直有几个疑问: v-for为什么要加key 为什么有时候用index作为key会出错 带着这个疑问,结合各种博客和源码,终于有了点眉目. virtual dom 要 ...
- DP(第二版)
第一版请见:直通 话不多说,直接上题 1.P1040 加分二叉树 直通 思路: 已知中序遍历,相当于一段区间了,所以我们枚举一个k,如果以k为根节点,能够将分数更新,那么这段区间的根节点就置为k,最后 ...
- 【概率论】3-6:条件分布(Conditional Distributions Part I)
title: [概率论]3-6:条件分布(Conditional Distributions Part I) categories: Mathematic Probability keywords: ...
- JavaWeb_(Mybatis框架)主配置文件介绍_四
系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...
- 蜗牛圈圈-时尚智能的运动计时App
Duang! 各类运动爱好者的福音来啦! 蜗牛圈圈-最智能的圈速计时助手 扫描二维码下载体验 [产品简介] -蜗牛圈圈是一款专业的圈速计时工具,帮助您获得整个运动过程中的各项数据,保存记录,分享激情. ...
- Python语法 - yield表达式(类似 m = yield i )
yield是个表达式而不仅仅是个语句,所以可以使用x = yield r 这样的语法, yield表达式可以接收send()发出的参数,yield表达式是跟send方法一起配合使用 send方 ...
- arcgis python 参数验证
import arcpy class ToolValidator(object): """Class for validating a tool's parameter ...
- 【matlab】模拟变焦拼接代码备份
1.初版,边缘未处理. % % In----near % If----far % In=imread('D:\文件及下载相关\桌面\模拟变焦拼接\Matlab_code\nearframe\frame ...
- linux 查看网络流量命令
转: linux 查看网络流量命令 2019年01月31日 14:22:00 weixin_33894992 阅读数 893 sar命令参数很多,有时间man一下. -n参数很有用,他有6个不同的 ...