1880: [Sdoi2009]Elaxia的路线

Time Limit: 4 Sec Memory Limit: 64 MB

Submit: 921 Solved: 354

[Submit][Status][Discuss]

Description

最近,Elaxia和w* 的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间。Elaxia和w 每天都要奔波于宿舍和实验室之间,他们 希望在节约时间的前提下,一起走的时间尽可能的长。 现在已知的是Elaxia和w*所在的宿舍和实验室的编号以及学校的地图:地图上有N个路 口,M条路,经过每条路都需要一定的时间。 具体地说,就是要求无向图中,两对点间最短路的最长公共路径。

Input

第一行:两个整数N和M(含义如题目描述)。 第二行:四个整数x1、y1、x2、y2(1 ≤ x1 ≤ N,1 ≤ y1 ≤ N,1 ≤ x2 ≤ N,1 ≤ ≤ N),分别表示Elaxia的宿舍和实验室及w**的宿舍和实验室的标号(两对点分别 x1,y1和x2,y2)。 接下来M行:每行三个整数,u、v、l(1 ≤ u ≤ N,1 ≤ v ≤ N,1 ≤ l ≤ 10000),表 u和v之间有一条路,经过这条路所需要的时间为l。 出出出格格格式式式::: 一行,一个整数,表示每天两人在一起的时间(即最长公共路径的长度)。

Output

一行,一个整数,表示每天两人在一起的时间(即最长公共路径的长度)

Sample Input

9 10

1 6 7 8

1 2 1

2 5 2

2 3 3

3 4 2

3 9 5

4 5 3

4 6 4

4 7 2

5 8 1

7 9 1

Sample Output

3

HINT

对于30%的数据,N ≤ 100;

对于60%的数据,N ≤ 1000;

对于100%的数据,N ≤ 1500,输入数据保证没有重边和自环。

Source

Day2

  1. 竟然自己rush出了正解,开心

题解:

4遍spfa,开四个dis数组,分别记录st1,st2,ed1,ed2到各点的最短路,然后枚举点对(i,j)判断i,j是否在最短路径上,然后更新答案即可.

  1. PS:网上的好像都是DP啊,拓扑啊什么的.....

code:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<cmath>
  6. #include<queue>
  7. using namespace std;
  8. int read()
  9. {
  10. int x=0,f=1; char ch=getchar();
  11. while (ch<'0' || ch>'9') {if (ch=='-') f=-1; ch=getchar();}
  12. while (ch>='0' && ch<='9') {x=x*10+ch-'0'; ch=getchar();}
  13. return x*f;
  14. }
  15. #define maxn 1510
  16. #define maxm 500010
  17. int n,m,ans;
  18. int st1,st2,ed1,ed2;
  19. int len1,len2;
  20. struct data{int to,next,tim;}edge[maxm*2];
  21. int head[maxn],cnt;
  22. void add(int u,int v,int t)
  23. {
  24. cnt++;
  25. edge[cnt].next=head[u]; head[u]=cnt;
  26. edge[cnt].to=v; edge[cnt].tim=t;
  27. }
  28. void insert(int u,int v,int t)
  29. {
  30. add(u,v,t); add(v,u,t);
  31. }
  32. int disst1[maxn],disst2[maxn],dised1[maxn],dised2[maxn];
  33. bool visit[maxn];
  34. #define inf 0x7fffffff
  35. void spfa(int s,int* dis)
  36. {
  37. queue<int>q;
  38. for (int i=1; i<=n; i++) dis[i]=inf;
  39. q.push(s); dis[s]=0;
  40. while (!q.empty())
  41. {
  42. int now=q.front(); q.pop();
  43. for (int i=head[now]; i; i=edge[i].next)
  44. if (dis[now]+edge[i].tim<dis[edge[i].to])
  45. {
  46. dis[edge[i].to]=edge[i].tim+dis[now];
  47. if (!visit[edge[i].to])
  48. {
  49. q.push(edge[i].to);
  50. visit[edge[i].to]=1;
  51. }
  52. }
  53. visit[now]=0;
  54. }
  55. }
  56. bool check(int loc)
  57. {
  58. if (disst1[loc]+dised1[loc]!=len1 || disst2[loc]+dised2[loc]!=len2)
  59. return false;
  60. return true;
  61. }
  62. int main()
  63. {
  64. n=read(),m=read();
  65. st1=read(),ed1=read(),st2=read(),ed2=read();
  66. for (int i=1; i<=m; i++)
  67. {
  68. int u=read(),v=read(),t=read();
  69. insert(u,v,t);
  70. }
  71. spfa(st1,disst1); spfa(st2,disst2);
  72. spfa(ed1,dised1); spfa(ed2,dised2);
  73. len1=disst1[ed1]; len2=disst2[ed2];
  74. for (int i=1; i<=n; i++)
  75. if (check(i))
  76. for (int j=1; j<=n; j++)
  77. if (check(j))
  78. ans=max(ans,abs(disst1[i]-disst1[j]));
  79. printf("%d\n",ans);
  80. return 0;
  81. }

BZOJ-1880 Elaxia的路线 SPFA+枚举的更多相关文章

  1. bzoj1880: [Sdoi2009]Elaxia的路线(spfa,拓扑排序最长路)

    1880: [Sdoi2009]Elaxia的路线 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 1944  Solved: 759[Submit][St ...

  2. [BZOJ1880] [Sdoi2009] Elaxia的路线 (SPFA & 拓扑排序)

    Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w**每天都要奔波于宿舍和实验室之间, ...

  3. BZOJ 3245: 最快路线 spfa

    3245: 最快路线 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=3245 Description 精明的小R每每开车出行总是喜欢走最快 ...

  4. 【BZOJ 1880】 [Sdoi2009]Elaxia的路线 (最短路树)

    1880: [Sdoi2009]Elaxia的路线 Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. ...

  5. BZOJ 1880: [Sdoi2009]Elaxia的路线( 最短路 + dp )

    找出同时在他们最短路上的边(dijkstra + dfs), 组成新图, 新图DAG的最长路就是答案...因为两人走同一条路但是不同方向也可以, 所以要把一种一个的s,t换一下再更新一次答案 ---- ...

  6. 【BZOJ1880】[Sdoi2009]Elaxia的路线(最短路)

    [BZOJ1880][Sdoi2009]Elaxia的路线(最短路) 题面 BZOJ 洛谷 题解 假装我们知道了任意两点间的最短路,那么我们怎么求解答案呢? 不难发现公共路径一定是一段连续的路径(如果 ...

  7. BZOJ1880: [Sdoi2009]Elaxia的路线(最短路)

    1880: [Sdoi2009]Elaxia的路线 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 2049  Solved: 805 题目链接:https ...

  8. 洛谷——P2149 [SDOI2009]Elaxia的路线

    P2149 [SDOI2009]Elaxia的路线 题目描述 最近,Elaxia和w的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w每 ...

  9. 洛谷 P2149 [SDOI2009]Elaxia的路线 解题报告

    P2149 [SDOI2009]Elaxia的路线 题目描述 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. Elaxia ...

随机推荐

  1. HDU 1394 & ZOJ 1484 Minimum Inversion Number

    (更新点查询区间) 这题重在想到,写代码很容易了..这题是利用线段树求逆序数,不按给定的顺序建树,而是有序地插入.比如每插入一个数,就统计之前插入的那些数里比他大的有多少个,这个数就是此时的逆序数,然 ...

  2. Android 三种动画详解

    [工匠若水 http://blog.csdn.net/yanbober 转载请注明出处.点我开始Android技术交流] 1 背景 不能只分析源码呀,分析的同时也要整理归纳基础知识,刚好有人微博私信让 ...

  3. 堡垒机环境-jumpserver部署

    1:安装数据库 这里是提前安装,也可以不安装,在安装jumpserver主程序的时候,他会询问你是否安装 yum -y install ncurses-devel cmake echo 'export ...

  4. poj3371

    Flesch Reading Ease Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2269 Accepted: 710 De ...

  5. 24Mybatis_延迟加载——用association来实现

    resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能. 需求: 如果查询订单并且关 ...

  6. WPF - MVVM - 如何将ComboBox的Selectchange事件binding到ViewModel

    转:http://www.cnblogs.com/mantian/p/3713524.html 将所有的事件,属性,都映射到ViewModel中.好处多多,以后开发尽量用这种模式. 解决方法: 使用S ...

  7. Python高手之路【八】python基础之requests模块

    1.Requests模块说明 Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2  ...

  8. swift 判断输入的字符串是否为数字

    // 判断输入的字符串是否为数字,不含其它字符 func isPurnInt(string: String) -> Bool { let scan: Scanner = Scanner(stri ...

  9. js计算两个日期相隔几小时几分钟?

        var dt1 = "2009-11-5 10:30"       var dt2 = "2009-11-8 9:20"     function ge ...

  10. jQuery使用ajax跨域获取数据

    var webMethod = "http://localhost:54473/Service1.asmx/HelloWorld";  jQuery.support.cors = ...