题目链接:https://vjudge.net/problem/POJ-2387

题意:给n个点(<=1000),m条边(<=2000),求结点n到结点1的最短路。

思路:dijkstra优先队列,复杂度O(nlogn)。

AC代码:

  1. #include<cstdio>
  2. #include<queue>
  3. #include<algorithm>
  4. using namespace std;
  5.  
  6. const int maxn=1e3+;
  7. const int inf=0x3f3f3f3f;
  8. int m,n,cnt,head[maxn],dis[maxn],vis[maxn];
  9. typedef pair<int,int> PII;
  10. priority_queue<PII,vector<PII>,greater<PII> > pq;
  11.  
  12. struct node{
  13. int v,w,nex;
  14. }edge[maxn<<];
  15.  
  16. void adde(int u,int v,int w){
  17. edge[++cnt].v=v;
  18. edge[cnt].w=w;
  19. edge[cnt].nex=head[u];
  20. head[u]=cnt;
  21. }
  22.  
  23. void dijkstra(){
  24. pq.push(make_pair(,n));
  25. for(int i=;i<=n;++i)
  26. dis[i]=inf;
  27. dis[n]=;
  28. int num=;
  29. while(!pq.empty()&&num<=n){
  30. int d=pq.top().first,u=pq.top().second;
  31. pq.pop();
  32. if(vis[u]) continue;
  33. vis[u]=;
  34. ++num;
  35. for(int i=head[u];i;i=edge[i].nex){
  36. int v=edge[i].v,w=edge[i].w;
  37. if(!vis[v]&&dis[v]>dis[u]+w){
  38. dis[v]=dis[u]+w;
  39. pq.push(make_pair(dis[v],v));
  40. }
  41. }
  42. }
  43. }
  44.  
  45. int main(){
  46. scanf("%d%d",&m,&n);
  47. for(int i=;i<=m;++i){
  48. int u,v,w;
  49. scanf("%d%d%d",&u,&v,&w);
  50. adde(u,v,w);
  51. adde(v,u,w);
  52. }
  53. dijkstra();
  54. printf("%d\n",dis[]);
  55. return ;
  56. }

(模板)poj2387(dijkstra+优先队列优化模板题)的更多相关文章

  1. 最短路--dijkstra+优先队列优化模板

    不写普通模板了,还是需要优先队列优化的昂 #include<stdio.h> //基本需要的头文件 #include<string.h> #include<queue&g ...

  2. Dijkstra + 优先队列优化 模板

    #include <cstdio> #include <cstring> #include <queue> #include <vector> #inc ...

  3. 地铁 Dijkstra(优先队列优化) 湖南省第12届省赛

    传送门:地铁 思路:拆点,最短路:拆点比较复杂,所以对边进行最短路,spfa会tle,所以改用Dijkstra(优先队列优化) 模板 /******************************** ...

  4. hdu 2544 单源最短路问题 dijkstra+堆优化模板

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  5. 【bzo1579】拆点+dijkstra优先队列优化+其他优化

    题意: n个点,m条边,问从1走到n的最短路,其中有K次机会可以让一条路的权值变成0.1≤N≤10000;1≤M≤500000;1≤K≤20 题解: 拆点,一个点拆成K个,分别表示到了这个点时还有多少 ...

  6. 晴天小猪历险记之Hill(Dijkstra优先队列优化)

    描述 这一天,他来到了一座深山的山脚下,因为只有这座深山中的一位隐者才知道这种药草的所在.但是上山的路错综复杂,由于小小猪的病情,晴天小猪想找一条需时最少的路到达山顶,但现在它一头雾水,所以向你求助. ...

  7. 最短路模板[spfa][dijkstra+堆优化][floyd]

    借bzoj1624练了一下模板(虽然正解只是floyd) spfa: #include <cstdio> #include <cstring> #include <alg ...

  8. 最小生成树--prim+优先队列优化模板

    prim+优先队列模板: #include<stdio.h> //大概要这些头文件 #include<string.h> #include<queue> #incl ...

  9. Luogu P4779 【模板】单源最短路径(标准版)(Dijkstra+堆优化模板)

    qwq dij其实和prim挺像的,prim是找权值最小点,dij是找边, 用一个优先队列就可以在加入边的时候直接排序,避免了每次遍历更新min priority_queue <pair< ...

随机推荐

  1. BigDecimal 3个toString()方法区别

    BigDecimal 的toEngineeringString.toPlainString和toString方法的区别: toEngineeringString:有必要时使用工程计数法.工程记数法是一 ...

  2. v-for为什么要加key,能用index作为key么

    前言 在vue中使用v-for时,一直有几个疑问: v-for为什么要加key 为什么有时候用index作为key会出错 带着这个疑问,结合各种博客和源码,终于有了点眉目. virtual dom 要 ...

  3. DP(第二版)

    第一版请见:直通 话不多说,直接上题 1.P1040 加分二叉树 直通 思路: 已知中序遍历,相当于一段区间了,所以我们枚举一个k,如果以k为根节点,能够将分数更新,那么这段区间的根节点就置为k,最后 ...

  4. 【概率论】3-6:条件分布(Conditional Distributions Part I)

    title: [概率论]3-6:条件分布(Conditional Distributions Part I) categories: Mathematic Probability keywords: ...

  5. JavaWeb_(Mybatis框架)主配置文件介绍_四

    系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...

  6. 蜗牛圈圈-时尚智能的运动计时App

    Duang! 各类运动爱好者的福音来啦! 蜗牛圈圈-最智能的圈速计时助手 扫描二维码下载体验 [产品简介] -蜗牛圈圈是一款专业的圈速计时工具,帮助您获得整个运动过程中的各项数据,保存记录,分享激情. ...

  7. Python语法 - yield表达式(类似 m = yield i )

      yield是个表达式而不仅仅是个语句,所以可以使用x = yield r 这样的语法, yield表达式可以接收send()发出的参数,yield表达式是跟send方法一起配合使用   send方 ...

  8. arcgis python 参数验证

    import arcpy class ToolValidator(object): """Class for validating a tool's parameter ...

  9. 【matlab】模拟变焦拼接代码备份

    1.初版,边缘未处理. % % In----near % If----far % In=imread('D:\文件及下载相关\桌面\模拟变焦拼接\Matlab_code\nearframe\frame ...

  10. linux 查看网络流量命令

    转: linux 查看网络流量命令 2019年01月31日 14:22:00 weixin_33894992 阅读数 893   sar命令参数很多,有时间man一下. -n参数很有用,他有6个不同的 ...