poj3463
大意:统计最小的长度个数+统计最小的长度+1的个数,大概就是求最短路和次短路的条数
更新的时候有5种情况,有个细节就是它得是二维的,一个表示节点编号,一个0/1表示它是次短路的还是最短路的,把结构体扔到队列里。需要更新的就是4种情况。
w<最小值
w=最小值
w<次小值
w=次小值

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<queue>
  4. #include<algorithm>
  5. #include<cmath>
  6. #include<ctime>
  7. #include<set>
  8. #include<map>
  9. #include<stack>
  10. #include<cstring>
  11. #define inf 2147483647
  12. #define ls rt<<1
  13. #define rs rt<<1|1
  14. #define lson ls,nl,mid,l,r
  15. #define rson rs,mid+1,nr,l,r
  16. #define N 10010
  17. #define For(i,a,b) for(long long i=a;i<=b;i++)
  18. #define p(a) putchar(a)
  19. #define g() getchar()
  20.  
  21. using namespace std;
  22.  
  23. long long T;
  24. long long n,m,x,y,v,s,t,w,flag,num,now;
  25. long long d[N][];
  26. long long f[N][];
  27. bool vis[N][];
  28. struct edge{
  29. long long n;
  30. long long v;
  31. edge *next;
  32. }*e[N];
  33.  
  34. struct node{
  35. long long num;
  36. long long flag;
  37. };
  38.  
  39. queue<node>q;
  40.  
  41. void in(long long &x){
  42. long long y=;
  43. char c=g();x=;
  44. while(c<''||c>''){
  45. if(c=='-')y=-;
  46. c=g();
  47. }
  48. while(c<=''&&c>=''){
  49. x=(x<<)+(x<<)+c-'';c=g();
  50. }
  51. x*=y;
  52. }
  53. void o(long long x){
  54. if(x<){
  55. p('-');
  56. x=-x;
  57. }
  58. if(x>)o(x/);
  59. p(x%+'');
  60. }
  61.  
  62. void push(long long x,long long y,long long v){
  63. edge *p;
  64. p=new edge();
  65. p->n=y;
  66. p->v=v;
  67. if(e[x]==)
  68. e[x]=p;
  69. else{
  70. p->next=e[x]->next;
  71. e[x]->next=p;
  72. }
  73. }
  74.  
  75. void spfa(){
  76. memset(d,0x3f,sizeof(d));
  77. d[s][]=;
  78. f[s][]=;
  79. q.push(node{s,});
  80. while(!q.empty()){
  81. node tp=q.front();
  82. q.pop();
  83. now=tp.num;
  84. flag=tp.flag;
  85. vis[now][flag]=;
  86. for(edge *i=e[now];i;i=i->next){
  87. w=d[now][flag]+i->v;
  88.  
  89. if(w<d[i->n][]){
  90. if(d[i->n][]!=d[][]){
  91. d[i->n][]=d[i->n][];
  92. f[i->n][]=f[i->n][];
  93. if(!vis[i->n][]){
  94. q.push(node{i->n,});
  95. vis[i->n][]=;
  96. }
  97. }
  98. f[i->n][]=f[now][flag];
  99. d[i->n][]=w;
  100. if(!vis[i->n][]){
  101. q.push(node{i->n,});
  102. vis[i->n][]=;
  103. }
  104. }
  105. else
  106. if(w==d[i->n][])
  107. f[i->n][]+=f[now][flag];
  108. else
  109. if(w<d[i->n][]){
  110. d[i->n][]=w;
  111. f[i->n][]=f[now][flag];
  112. if(!vis[i->n][]){
  113. q.push(node{i->n,});
  114. vis[i->n][]=;
  115. }
  116. }
  117. else
  118. if(w==d[i->n][])
  119. f[i->n][]+=f[now][flag];
  120. }
  121. }
  122. }
  123.  
  124. void clear(){
  125. memset(f,,sizeof(f));
  126. memset(vis,,sizeof(vis));
  127. memset(e,,sizeof(e));
  128. }
  129.  
  130. int main(){
  131. in(T);
  132. while(T--){
  133. clear();
  134. in(n);in(m);
  135. For(i,,m){
  136. in(x);in(y);in(v);
  137. push(x,y,v);
  138. }
  139. in(s);in(t);
  140. spfa();
  141. if(d[t][]==d[t][]+)
  142. o(f[t][]+f[t][]);
  143. else
  144. o(f[t][]);
  145. p('\n');
  146. }
  147. return ;
  148. }

次短路poj3463的更多相关文章

  1. poj3463 最短路和比最短路长1的路径数

    这题需要很好的理解Dij. 在Dij的基础上,每个点多一个次短路的长度和数量进行控制. 那么在队列中,最短路控制时出现n次,次短路控制出现n次.注意松弛条件中val值和最短路.次短路的关系. 这题需要 ...

  2. 最短路和次短路的条数(dijstra算法或spfa算法)POJ3463

    http://poj.org/problem?id=3463 Sightseeing Time Limit: 2000MS   Memory Limit: 65536K Total Submissio ...

  3. POJ---3463 Sightseeing 记录最短路和次短路的条数

    Sightseeing Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9247   Accepted: 3242 Descr ...

  4. POJ3463【次短路】

    转自:http://www.cnblogs.com/jackge/archive/2013/04/29/3051273.html 算法:最短路和次短路.Dijkstra算法.采用邻接表建图. 总结:不 ...

  5. [POJ3463] Sightseeing(次短路 Heap + Dijkstra)

    传送门 用dijkstra比较好,spfa可能有的重复 dis[x][2]:dis[x][0]表示起点到x的最短路.dis[x][1]表示起点到x的次短路: tot[x][2]:tot[x][0]表示 ...

  6. poj3463 Sightseeing——次短路计数

    题目:http://poj.org/problem?id=3463 次短路计数问题,在更新最短路的同时分类成比最短路短.长于最短路而短于次短路.比次短路长三种情况讨论一下,更新次短路: 然而其实不必被 ...

  7. poj3463&&hdu1688 次短路(dijkstra)

    A*算法超内存. 对于最短路,我们可以维护dis[]数组,来求得最短路,但是此题有次短路,所以定义dis[][2],dis[][0]表示最短路,dis[][1]表示次短路;cnt[][2],cnt[] ...

  8. 洛谷P1144 最短路计数 及其引申思考

    图论题目练得比较少,发一道spfa的板子题目- 题目:P1144 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: ...

  9. bzoj1001--最大流转最短路

    http://www.lydsy.com/JudgeOnline/problem.php?id=1001 思路:这应该算是经典的最大流求最小割吧.不过题目中n,m<=1000,用最大流会TLE, ...

随机推荐

  1. 阿里第一颗芯片问世,平头哥发布最强AI芯片含光800

    阿里巴巴第一颗自研芯片正式问世.9月25日的杭州云栖大会上,达摩院院长张建锋现场展示了这款全球最强的AI芯片——含光800.在业界标准的ResNet-50测试中,含光800推理性能达到78563 IP ...

  2. 思维题+栈的应用——cf1092D有意思

    第一例很简单,把两个差为偶数的列不断合并即可 这种不需要撤销的合并相连数直接用栈来做 /* 如果相邻两列高度差为偶数 那么可以直接消去 */ #include<bits/stdc++.h> ...

  3. JAVA入门各种API参考

    java sdk: https://docs.oracle.com/javase/8/docs/api/ servlet api: http://tomcat.apache.org/tomcat-8. ...

  4. 数据库连接JDBC

    #=======================mysql============================= #jdbc.driverClassName=com.mysql.jdbc.Driv ...

  5. marquee标签(跑马灯效果)

  6. Pyinstaller打包Web项目

    最近需要用python打包一个单页面网页demo,于是准备用python包pyinstaller来打包程序.网上搜索了一下,大部分教程都是打包非web项目,这里分享一下打包简单网页demo的过程. 系 ...

  7. Java开发系列-文件上传

    概述 Java开发中文件上传的方式有很多,常见的有servlet3.0.common-fileUpload.框架.不管哪种方式,对于文件上传的本质是不变的. 文件上传的准备 文件上传需要客户端跟服务都 ...

  8. Luogu P1041 传染病控制(搜索)

    P1041 传染病控制 题意 题目背景 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完全认识这 ...

  9. 【JZOJ2288】【BZOJ1898】【luoguP2579】沼泽鳄鱼

    description 潘塔纳尔沼泽地号称世界上最大的一块湿地,它地位于巴西中部马托格罗索州的南部地区.每当雨季来临,这里碧波荡漾.生机盎然,引来不少游客. 为了让游玩更有情趣,人们在池塘的中央建设了 ...

  10. 0908NOIP模拟测试赛后总结

    %%%skyh rank1- 奶风神.kx.有钱人 rank2-210 NC锅.RNB.B哥 rank5-200 我 rank32- 9-13upd:无意中点进了某个博客发现我竟然考场上yy出了树上莫 ...