银牛排队


对于我这种蒟蒻来说,还是不要跑一次单元最短路。跑两次好写呀(~ ̄▽ ̄)~

而题目中是有向图。如果如果按照题意进行最短路的话。就会出现一个单终点最短路和一个单起点最短路

对于单起点自然就是套模板,但对于单终点最短路怎么办呢?

显而易见的是,只有一个终点废话呢你(/゚Д゚)/

这样我们就可以反向存一次有向边。将终点变为起点,这样的话就可以套模板了合着就是刷模板题呀(▼⊿▼)

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<queue>
  4. using namespace std;
  5. int head[1001][2];
  6. struct node
  7. {
  8. int point;
  9. int next;
  10. int dist;
  11. };
  12. node line[101000][2];
  13. int tail;
  14. queue<int>q0;
  15. queue<int>q1;
  16. bool exist[1001][2];
  17. int dis[1001][2];
  18. void add(int x,int y,int val,int d)
  19. {
  20. line[++tail][d].point=y;
  21. line[tail][d].dist=val;
  22. line[tail][d].next=head[x][d];
  23. head[x][d]=tail;
  24. }
  25. int main()
  26. {
  27. int n,m,begin;
  28. scanf("%d%d%d",&n,&m,&begin);
  29. for(int i=1;i<=n;i++)
  30. {
  31. head[i][0]=head[i][1]=-1;
  32. dis[i][0]=dis[i][1]=0x7fffffff;
  33. }
  34. int a,b,c;
  35. for(int i=1;i<=m;i++)
  36. {
  37. scanf("%d%d%d",&a,&b,&c);
  38. add(a,b,c,0);
  39. add(b,a,c,1);
  40. }
  41. int pass;
  42. q0.push(begin);
  43. dis[begin][0]=0;
  44. exist[begin][0]=true;
  45. while(!q0.empty())
  46. {
  47. pass=q0.front();
  48. q0.pop();
  49. exist[pass][0]=false;
  50. int need=head[pass][0];
  51. while(need!=-1)
  52. {
  53. if(dis[line[need][0].point][0]>dis[pass][0]+line[need][0].dist)
  54. {
  55. dis[line[need][0].point][0]=dis[pass][0]+line[need][0].dist;
  56. if(!exist[line[need][0].point][0])
  57. q0.push(line[need][0].point);
  58. }
  59. need=line[need][0].next;
  60. }
  61. }
  62. q1.push(begin);
  63. exist[begin][1]=true;
  64. dis[begin][1]=0;
  65. while(!q1.empty())
  66. {
  67. pass=q1.front();
  68. q1.pop();
  69. exist[pass][1]=false;
  70. int need=head[pass][1];
  71. while(need!=-1)
  72. {
  73. if(dis[line[need][1].point][1]>dis[pass][1]+line[need][1].dist)
  74. {
  75. dis[line[need][1].point][1]=dis[pass][1]+line[need][1].dist;
  76. if(!exist[line[need][1].point][1])
  77. q1.push(line[need][1].point);
  78. }
  79. need=line[need][1].next;
  80. }
  81. }
  82. int ans=-0x7fffff;
  83. for(int i=1;i<=n;i++)
  84. if(i!=begin)
  85. ans=max(ans,dis[i][0]+dis[i][1]);
  86. printf("%d",ans);
  87. }

[USACO07FEB]银牛派对Silver Cow Party---最短路模板题的更多相关文章

  1. 洛谷——P1821 [USACO07FEB]银牛派对Silver Cow Party

    P1821 [USACO07FEB]银牛派对Silver Cow Party 题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently ...

  2. 洛谷 P1821 [USACO07FEB]银牛派对Silver Cow Party 题解

    P1821 [USACO07FEB]银牛派对Silver Cow Party 题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently ...

  3. luogu P1821 [USACO07FEB]银牛派对Silver Cow Party

    题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the b ...

  4. [USACO07FEB]银牛派对Silver Cow Party

    题目简叙: 寒假到了,N头牛都要去参加一场在编号为X(1≤X≤N)的牛的农场举行的派对(1≤N≤1000),农场之间有M(1≤M≤100000)条有向路,每条路长Ti(1≤Ti≤100). 每头牛参加 ...

  5. P1821 [USACO07FEB]银牛派对Silver Cow Party

    题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the b ...

  6. 洛谷P1821 [USACO07FEB]银牛派对Silver Cow Party

    题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the b ...

  7. 「Luogu 1821」[USACO07FEB]银牛派对Silver Cow Party

    更好的阅读体验 Portal Portal1: Luogu Portal2: POJ Description One cow from each of N farms \((1 \le N \le 1 ...

  8. 洛谷 P1821 [USACO07FEB]银牛派对Silver Cow Party

    银牛派对 正向建图+反向建图, 两边跑dijkstra,然后将结果相加即可. 反向建图以及双向建图的做法是学习图论的必备思想. #include <iostream> #include & ...

  9. 【luogu P1821 [USACO07FEB]银牛派对Silver Cow Party】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1821 反向多存一个图,暴力跑两遍 #include <cstdio> #include < ...

随机推荐

  1. IP分片 与 TCP分段的区别 !!!!careful========以及udp中一个包大小究竟为多大合适 ==========三次握手四次挥手细节

    首先声明:TCP分片应该称为TCP分段 TCP/IP详解--TCP的分段和IP的分片 分组可以发生在运输层和网络层,运输层中的TCP会分段,网络层中的IP会分片.IP层的分片更多的是为运输层的UDP服 ...

  2. Silverlight 用DependencyProperty 自定义ImageButton控件 定义属性

    为ImageButton自定义IconSource和Contents属性 xaml代码 <UserControl x:Class="SilverlightCreate.Silverli ...

  3. DataFrame的数据类型转换

    dfxxx['username']=pd.to_numeric(dfxxx['username'],errors='coerce')#将不能转换数据类型的值强制转换成NaN dfxxx['userna ...

  4. Vertex And Fragment Shader(顶点和片段着色器)

    Vertex And Fragment Shader(顶点和片段着色器) Shader "Unlit/ Vertex­_And_Fragment_Shader " { Proper ...

  5. bootstrap3-dialog:更强大、更灵活的模态框(封装好的模态框)

    用过bootstrap框架的同学们都知道,bootstrap自带的模态框用起来很不灵活,可谓鸡肋的很.但nakupanda开源作者封装了一个更强大.更灵活的模态框——bootstrap3-dialog ...

  6. Murano py27和py34的兼容处理

    tox.ini envlist = py27,py34,pep8 1. django.utils.encoding.force_unicode替换成django.utils.encoding.forc ...

  7. MATLAB循环和函数定义,调用

    格式不要括号,最后有end for 循环变量 = 表达式1:表 2:表 3 表1:初值     表2:步长      表3:终值 求圆周率:π/4=1 - 1/3 + 1/5 -1/7+...+(-1 ...

  8. Postman+Newman+Jenkins APItest自动化集成测试

    postman做接口测试简单易用很容易上手,但是接口越来越多,每次手动点击runner进行测试不灵活,最近就研究了下newman,利用newman实现接口的自动化测试,但是每次需要命令行操作也不方便, ...

  9. MVC 模型过滤

    通用返回模型 /// <summary> /// WebApi返回数据的泛型类 /// </summary> /// <typeparam name="T&qu ...

  10. Hibernate系列4-----之删除

    1.和它的增改查兄弟不同,多了个until包定义了HibernateUntil类,让我们来一起看看吧 public class HibernateUntil { private static Conf ...