1. //Accepted 1124 KB 0 ms
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <iostream>
  5. #include <queue>
  6. #include <cmath>
  7. #include <algorithm>
  8. using namespace std;
  9. /**
  10. * This is a documentation comment block
  11. * 如果有一天你坚持不下去了,就想想你为什么走到这儿!
  12. * @authr songt
  13. */
  14. ;
  15. ;
  16. const long long inf = 100000000000000LL;
  17. struct node
  18. {
  19. int u,v,c;
  20. node()
  21. {
  22.  
  23. }
  24. node(int u,int v,int c):u(u),v(v),c(c)
  25. {
  26.  
  27. }
  28. }p[imax_e],rp[imax_e];
  29. int head[imax_n];
  30. int next[imax_e];
  31. int rhead[imax_n];
  32. int rnext[imax_e];
  33. int e;
  34. int re;
  35. long long dis[imax_n];
  36. long long cost[imax_n];
  37. bool vis[imax_n];
  38. int n,m,x;
  39. void init()
  40. {
  41. e=;
  42. re=;
  43. memset(head,-,sizeof(head));
  44. memset(next,-,sizeof(next));
  45. memset(rhead,-,sizeof(rhead));
  46. memset(rnext,-,sizeof(rnext));
  47. }
  48. void addEdge(int u,int v,int c)
  49. {
  50. p[e]=node(u,v,c);
  51. next[e]=head[u];
  52. head[u]=e++;
  53. }
  54. void raddEdge(int u,int v,int c)
  55. {
  56. rp[re]=node(u,v,c);
  57. rnext[re]=rhead[u];
  58. rhead[u]=re++;
  59. }
  60. queue<int > q;
  61. int cnt[imax_n];
  62. bool relax(int u,int v,int c)
  63. {
  64. if (dis[v]>dis[u]+c)
  65. {
  66. dis[v]=dis[u]+c;
  67. return true;
  68. }
  69. return false;
  70. }
  71. bool spfa(int src,int h[],int nt[],node p[])
  72. {
  73. memset(cnt,,sizeof(cnt));
  74. while (!q.empty()) q.pop();
  75. memset(vis,,sizeof(vis));
  76. q.push(src);
  77. vis[src]=true;
  78. ;i<=n;i++)
  79. dis[i]=inf;
  80. dis[src]=;
  81. while (!q.empty())
  82. {
  83. int pre=q.front();
  84. q.pop();
  85. vis[pre]=false;
  86. ;i=nt[i])
  87. {
  88. if (relax(pre,p[i].v,p[i].c) && !vis[p[i].v])
  89. {
  90. if ((++cnt[p[i].v])>n) return false;
  91. vis[p[i].v]=true;
  92. q.push(p[i].v);
  93. }
  94. }
  95. }
  96. return true;
  97. }
  98. long long slove()
  99. {
  100. int u,v,c;
  101. init();
  102. ;i<=m;i++)
  103. {
  104. scanf("%d%d%d",&u,&v,&c);
  105. addEdge(u,v,c);
  106. raddEdge(v,u,c);
  107. }
  108. ;
  109. spfa(x,head,next,p);
  110. ;i<=n;i++)
  111. {
  112. cost[i]=dis[i];
  113. //printf("dis[%d]=%d\n",i,dis[i]);
  114. }
  115. spfa(x,rhead,rnext,rp);
  116. ;i<=n;i++)
  117. {
  118. //printf("cost[%d]=%d\n",i,dis[i]);
  119. if (cost[i]+dis[i]>ans)
  120. ans=cost[i]+dis[i];
  121. }
  122. return ans;
  123. }
  124. int main()
  125. {
  126. while (scanf("%d%d%d",&n,&m,&x)!=EOF)
  127. {
  128. __int64 ans=slove();
  129. printf("%I64d\n",ans);
  130. }
  131. ;
  132. }

poj3268 最短路的更多相关文章

  1. poj-3268最短路

    title: poj-3268最短路 date: 2018-10-13 15:54:34 tags: acm 刷题 categories: ACM-最短路 概述 这是一道最短路的模板题,,,不过虽然是 ...

  2. POJ-3268(来回最短路+dijkstra算法)

    Silver Cow Party POJ-3268 这题也是最短路的模板题,只不过需要进行两次求解最短路,因为涉及到来回的最短路之和. 该题的求解关键是:求解B-A的最短路时,可以看做A是起点,这就和 ...

  3. POJ3268 Silver Cow Party Dijkstra最短路

    Description One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to atten ...

  4. POJ-3268.SilverCowParty.(最短路 + 图的转置)

    本题思路:对原图和原图的逆图分别用一次最短路,找出最大值即可. 一开始是我是对每个顶点spfa搜了一波,结果判题时间巨长,还好这个题的数据量不是很大,所以就用了另一种思路. 参考代码:spfa单结点爆 ...

  5. (最短路)Silver Cow Party --POJ--3268

    题目链接: http://poj.org/problem?id=3268 题意: 先求出所有牛到x的最短路,再求出x到所有牛的最短路,两者相加取最大值(单向图)(可以用迪杰斯特拉,SPFA) 迪杰斯特 ...

  6. POJ3268 Silver Cow Party【最短路】

    One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the big co ...

  7. 来回最短路POJ3268

    这个题得主要考点在于给你的图是去了再回来得有向图,如何模块化解决呢就是转变图的方向,我们根据初始得放心求出每个点到x得最短路,然后转变所有路得方向再求出所有点到x得最短路,最后一相加就是最后的来回了~ ...

  8. POJ3268【最短路】

    题意: n个点m条有向边,每个点有一头牛,每头牛会沿着各自的最短路先到x点,然后又从x点到各自的点,求这些牛中间最短路程最大的牛. 思路: 从x点到各点的最短路不用说了,裸的最短路: 但是从所有点到x ...

  9. POJ3268 Silver Cow Party —— 最短路

    题目链接:http://poj.org/problem?id=3268 Silver Cow Party Time Limit: 2000MS   Memory Limit: 65536K Total ...

随机推荐

  1. 使用Netty收发二进制报文问题记

    1.java二进制编解码 byteBuffer.flip() byteBuffer.getInt() 与 byteBuf.getInt(11) 2.粘包拆包问题 LengthFieldBasedFra ...

  2. apache和tomcat有什么不同,为什么要整合apache 和tomcat?

    1. Apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展.2. Apache和Tomcat都可以做为独立的web服务器来运行,但是Ap ...

  3. 复选框(checkbox)、单选框(radiobox)的使用

    复选框(checkbox).单选框(radiobox)的使用 复选框: HTML: // 复选框 <input type="checkbox" name="chec ...

  4. [问题2014S15] 复旦高等代数II(13级)每周一题(第十五教学周)

    [问题2014S15]  设 \(O\) 为 \(n\) 阶正交阵,\(A=\mathrm{diag}\{a_1,a_2,\cdots,a_n\}\) 为实对角阵, 证明: 方阵 \(OA\) 的特征 ...

  5. iOS OAuth2.0认证和SSO授权

    OAuth2.0和SSO授权   一.OAuth2.0授权协议 一种安全的登陆协议,用户提交的账户密码不提交到本APP,而是提交到授权服务器,待服务器确认后,返回本APP一个访问令牌,本APP即可用该 ...

  6. VBA中练习ADO:ActiveX Data Object

    前期绑定,要先添加引用---"Microsoft ActiveX Data Objects 6.1" ADO学习的权威参考可点击:w3school ADO简单理解:是几个Activ ...

  7. 简单说一下printf("%*s%s",xx,xx,xx);或printf("%*s\n",xx,xx);

    大家还记得这个例子吗 #include "public.h" int main() { ; printf("%4d\n",a); ; } 这个输出结果为:    ...

  8. 基于注解的Spring AOP的配置和使用--转载

    AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向切面编程.可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术. ...

  9. mac下使用brew安装ffmpeg支持x265

    使用brew install ffmpeg 安装ffmpeg默认是没有支持x265的, 使用brew info ffmpeg 获取安装选项帮助, 使用brew reinstall ffmpeg --w ...

  10. find一些常用参数的一些常用实例和一些具体用法和注意事项。

    find一些常用参数的一些常用实例和一些具体用法和注意事项. 1.使用name选项: 文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用.  可以使用某种文件名模式来匹配 ...