P2939 [USACO09FEB]改造路Revamping Trails


裸地分层图最短路

培训的时候考到过

但是……

我考试的时候写了个基本没有的树状数组优化。然后顺利的被卡到了70分(裸的spfa都有80分qwq)

伤心

然后今天又重新拿堆优化dij搞了一波。一发ac真开心qwq

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<iostream>
  4. #include<queue>
  5. #include<cstring>
  6. using std::min;
  7. using std::priority_queue;
  8. const int maxn=20100;
  9. int dis[maxn][21],head[maxn],tail;
  10. bool Get[maxn][21];
  11. int n,m,k;
  12. struct node
  13. {
  14. int point;
  15. int weight;
  16. int nxt;
  17. };
  18. struct Data//优先队列使用的结构体
  19. {
  20. int p,k;
  21. int val;
  22. Data (int a=0,int b=0,int c=0){ p=a,k=b,val=c; }
  23. bool operator < (const Data &A)const
  24. {
  25. return val>A.val;
  26. }
  27. };
  28. node line[101000];
  29. int read()
  30. {
  31. int res=0;char c=getchar();
  32. while(c>'9'||c<'0') c=getchar();
  33. while(c>='0'&&c<='9')
  34. {
  35. res=res*10+c-'0';
  36. c=getchar();
  37. }
  38. return res;
  39. }
  40. void add(int x,int y,int z)
  41. {
  42. line[++tail].point=y;
  43. line[tail].nxt=head[x];
  44. line[tail].weight=z;
  45. head[x]=tail;
  46. }
  47. void bfs()
  48. {
  49. priority_queue<Data>q;
  50. memset(dis,127,sizeof(dis));
  51. dis[1][0]=0;
  52. q.push(Data(1,0,0));//起点
  53. int tot=0;
  54. while(!q.empty())
  55. {
  56. Data pas=q.top();q.pop();
  57. //printf("\t%d\t%d\t%d\n",pas.p,pas.k,pas.val);
  58. while(Get[pas.p][pas.k])//这个状态已经到达了
  59. {
  60. pas=q.top();
  61. q.pop();
  62. }
  63. int P=pas.p,K=pas.k;
  64. Get[P][K]=true;
  65. if(P==n)//终点状态
  66. {
  67. printf("%d",pas.val);
  68. break;
  69. }
  70. for(int i=head[P];i;i=line[i].nxt)
  71. {
  72. int v=line[i].point;
  73. if(K+1<=k&&dis[v][K+1]>dis[P][K])//使用边权无效化
  74. {
  75. dis[v][K+1]=dis[P][K];
  76. Data nxt(v,K+1,dis[v][K+1]);
  77. q.push(nxt);
  78. }
  79. if(dis[v][K]>dis[P][K]+line[i].weight)//不消除边权
  80. {
  81. dis[v][K]=dis[P][K]+line[i].weight;
  82. Data nxt(v,K,dis[v][K]);
  83. q.push(nxt);
  84. }
  85. }
  86. }
  87. }
  88. int main()
  89. {
  90. //n=read(),m=read(),k=read();
  91. scanf("%d%d%d",&n,&m,&k);
  92. int a,b,c;
  93. for(int i=1;i<=m;i++)
  94. {
  95. //int a=read(),b=read(),c=read();
  96. scanf("%d%d%d",&a,&b,&c);
  97. add(a,b,c);add(b,a,c);
  98. }
  99. bfs();
  100. }
  101. /*
  102. 5 6 1
  103. 1 2 2
  104. 1 3 4
  105. 2 4 3
  106. 3 4 1
  107. 3 5 6
  108. 4 5 2
  109. */

P2939 改造路的更多相关文章

  1. P2939 [USACO09FEB]改造路Revamping Trails

    P2939 [USACO09FEB]改造路Revamping Trails 同bzoj2763.不过dbzoj太慢了,bzoj又交不了. 裸的分层图最短路. f[i][j]表示免费走了j条路到达i的最 ...

  2. 洛谷 P2939 [USACO09FEB]改造路Revamping Trails 题解

    P2939 [USACO09FEB]改造路Revamping Trails 题目描述 Farmer John dutifully checks on the cows every day. He tr ...

  3. [USACO09FEB] 改造路Revamping Trails | [JLOI2011] 飞行路线

    题目链接: 改造路 飞行路线 其实这两道题基本上是一样的,就是分层图的套路题. 为什么是分层图呢?首先,我们的选择次数比较少,可以把这几层的图建出来而不会爆空间.然后因为选择一个边权为0的路线之后我们 ...

  4. 【luogu P2939 [USACO09FEB]改造路Revamping Trails】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2939 本来说是双倍经验题,跟飞行路线一样的,结果我飞行路线拿deque优化SPFA过了这里过不了了. 所以多 ...

  5. 洛谷P2939 [USACO09FEB]改造路Revamping Trails

    题意翻译 约翰一共有\(N\))个牧场.由\(M\)条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场\(1\)出发到牧场\(N\)去给奶牛检查身体. 通过每条小径都需要消耗一定的时间.约翰 ...

  6. P2939 [USACO09FEB]改造路[分层图最短路]

    题意翻译 约翰一共有N)个牧场.由M条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场1出发到牧场N去给奶牛检查身体. 通过每条小径都需要消耗一定的时间.约翰打算升级其中K条小径,使之成为高 ...

  7. 洛谷 P2939 [USACO09FEB]改造路Revamping Trails

    题意翻译 约翰一共有N)个牧场.由M条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场1出发到牧场N去给奶牛检查身体. 通过每条小径都需要消耗一定的时间.约翰打算升级其中K条小径,使之成为高 ...

  8. 分层图【p2939】[USACO09FEB]改造路Revamping Trails

    Description 约翰一共有N)个牧场.由M条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场1出发到牧场N去给奶牛检查身体. 通过每条小径都需要消耗一定的时间.约翰打算升级其中K条小 ...

  9. P2939 [USACO09FEB]改造路Revamping Trails(分层图最短路)

    传送门 完了我好像连分层图最短路都不会了……果然还是太菜了…… 具体来说就是记录一个步数表示免费了几条边,在dijkstra的时候以步数为第一关键字,距离为第二关键字.枚举边的时候分别枚举免不免费下一 ...

随机推荐

  1. 第十三章:基于socket.io实现即时通信

    安装好环境,请参考ionic环境搭建之windows篇 和 ionic环境搭建之OS X篇 . 服务器端的搭建参考socket io官网,里面有非常详细的描述,按照步骤下来,最终可以在localhos ...

  2. cloudermanager安装时database connection出现Unexpected error. Unable to verify database connection(图文详解)

    不多说,直接上干货! http://www.aboutyun.com/forum.php?mod=viewthread&tid=20455&extra=&page=2 欢迎大家 ...

  3. Linux IO

    Linux 系统编程(IO) 工具 strace: 根据系统调用 od -tcx: 查看二进制 函数参数 使用const修改的指针为传入参数 不使用const的指针为传出参数 string操作的函数 ...

  4. 用ECMAscript5中的forEach函数遍历数组

    1 var a = [1,2,3]; 2 a.forEach(function(value,index,arr){ 3 arr[index] = value + index; 4 }) 5 conso ...

  5. springBoot 中redis 注解缓存的使用

    1,首先在启动类上加上 @EnableCaching 这个注解 在查询类的controller,或service ,dao 中方法上加 @Cacheable 更新或修改方法上加 @CachePut 注 ...

  6. PAT 1064 Complete Binary Search Tree

    #include <iostream> #include <cstdio> #include <cstdlib> #include <vector> # ...

  7. JQuery.iviewer

    from: http://test.dpetroff.ru/jquery.iviewer/test/# jquery.iviewer.js: /* * iviewer Widget for jQuer ...

  8. CMDB认识和需求分析

    一.认识ITIL   ITIL即IT基础架构库(Information Technology Infrastructure Library,信息技术基础架构库)由英国政府部门CCTA(Central ...

  9. drupal对数据库操作

    // nodenode_load($nid = NULL, $vid = NULL, $reset = FALSE);node_load_multiple($nids = array(), $cond ...

  10. ie浏览器 vuejs axios Promise 未定义

    随着前端技术的发现,es6语法在被更大范围的使用,而很多的浏览器并不支持ES6,比如IE…… 这里我们介绍几个解决方法. 一.使浏览器兼容ES6基本语法 1.在引入其他脚本前先引入browser.mi ...