1726: [Usaco2006 Nov]Roadblocks第二短路

Description

贝茜把家搬到了一个小农场,但她常常回到FJ的农场去拜访她的朋友。贝茜很喜欢路边的风景,不想那么快地结束她的旅途,于是她每次回农场,都会选择第二短的路径,而不象我们所习惯的那样,选择最短路。 贝茜所在的乡村有R(1<=R<=100,000)条双向道路,每条路都联结了所有的N(1<=N<=5000)个农场中的某两个。贝茜居住在农场1,她的朋友们居住在农场N(即贝茜每次旅行的目的地)。 贝茜选择的第二短的路径中,可以包含任何一条在最短路中出现的道路,并且,一条路可以重复走多次。当然咯,第二短路的长度必须严格大于最短路(可能有多条)的长度,但它的长度必须不大于所有除最短路外的路径的长度。

刷水有利于健康。

话说这还是前天考试的T3嘞。。。

code:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <queue>
  4. using namespace std;
  5. const int wx=200017;
  6. inline int read(){
  7. int sum=0,f=1; char ch=getchar();
  8. while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}
  9. while(ch>='0'&&ch<='9'){sum=(sum<<1)+(sum<<3)+ch-'0'; ch=getchar();}
  10. return sum*f;
  11. }
  12. int n,m,num,tot;
  13. int head[wx],diss[wx],dist[wx],vis[wx];
  14. struct e{
  15. int nxt,to,dis;
  16. }edge[wx*2];
  17. void add(int from,int to,int dis){
  18. edge[++num].nxt=head[from];
  19. edge[num].to=to;
  20. edge[num].dis=dis;
  21. head[from]=num;
  22. }
  23. struct node{
  24. int u,d;
  25. friend bool operator < (const node & a,const node &b){
  26. return a.d>b.d;
  27. }
  28. };
  29. priority_queue<node >q;
  30. void Dijs(){
  31. for(int i=1;i<=n;i++)diss[i]=0x3f3f3f3f,vis[i]=0;
  32. diss[1]=0; q.push((node){1,0});
  33. while(q.size()){
  34. int u=q.top().u; q.pop();
  35. if(vis[u])continue; vis[u]=1;
  36. for(int i=head[u];i;i=edge[i].nxt){
  37. int v=edge[i].to;
  38. if(diss[v]>diss[u]+edge[i].dis){
  39. diss[v]=diss[u]+edge[i].dis;
  40. q.push((node){v,diss[v]});
  41. }
  42. }
  43. }
  44. }
  45. void Dijt(){
  46. for(int i=1;i<=n;i++)dist[i]=0x3f3f3f3f,vis[i]=0;
  47. dist[n]=0; q.push((node){n,0});
  48. while(q.size()){
  49. int u=q.top().u; q.pop();
  50. if(vis[u])continue; vis[u]=1;
  51. for(int i=head[u];i;i=edge[i].nxt){
  52. int v=edge[i].to;
  53. if(dist[v]>dist[u]+edge[i].dis){
  54. dist[v]=dist[u]+edge[i].dis;
  55. q.push((node){v,dist[v]});
  56. }
  57. }
  58. }
  59. }
  60. void work(){
  61. int tmp=0x3f3f3f3f;
  62. int minn=diss[n];
  63. for(int u=1;u<=n;u++){
  64. for(int i=head[u];i;i=edge[i].nxt){
  65. int v=edge[i].to;
  66. int now=diss[u]+dist[v]+edge[i].dis;
  67. if(now<tmp&&now>minn){
  68. tmp=now;
  69. }
  70. }
  71. }
  72. printf("%d\n",tmp);
  73. }
  74. int main(){
  75. n=read(); m=read();
  76. for(int i=1;i<=m;i++){
  77. int x,y,z;
  78. x=read(); y=read(); z=read();
  79. add(x,y,z); add(y,x,z);
  80. }
  81. Dijs();
  82. Dijt();
  83. work();
  84. return 0;
  85. }

最短路【bzoj1726】: [Usaco2006 Nov]Roadblocks第二短路的更多相关文章

  1. BZOJ1726: [Usaco2006 Nov]Roadblocks第二短路

    1726: [Usaco2006 Nov]Roadblocks第二短路 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 768  Solved: 369[S ...

  2. BZOJ1726: [Usaco2006 Nov]Roadblocks第二短路 K短路

    Description 贝茜把家搬到了一个小农场,但她常常回到FJ的农场去拜访她的朋友.贝茜很喜欢路边的风景,不想那么快地结束她的旅途,于是她每次回农场,都会选择第二短的路径,而不象我们所习惯的那样, ...

  3. Bzoj 1726: [Usaco2006 Nov]Roadblocks第二短路 dijkstra,堆,A*,次短路

    1726: [Usaco2006 Nov]Roadblocks第二短路 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 969  Solved: 468[S ...

  4. BZOJ 1726: [Usaco2006 Nov]Roadblocks第二短路( 最短路 )

    从起点和终点各跑一次最短路 , 然后枚举每一条边 , 更新answer ---------------------------------------------------------------- ...

  5. BZOJ 1726: [Usaco2006 Nov]Roadblocks第二短路

    1726: [Usaco2006 Nov]Roadblocks第二短路 Description 贝茜把家搬到了一个小农场,但她常常回到FJ的农场去拜访她的朋友.贝茜很喜欢路边的风景,不想那么快地结束她 ...

  6. 1726: [Usaco2006 Nov]Roadblocks第二短路

    1726: [Usaco2006 Nov]Roadblocks第二短路 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 835  Solved: 398[S ...

  7. [Usaco2006 Nov]Roadblocks第二短路

    贝茜把家搬到了一个小农场,但她常常回到FJ的农场去拜访她的朋友.贝茜很喜欢路边的风景,不想那么快地结束她的旅途,于是她每次回农场,都会选择第二短的路径,而不象我们所习惯的那样,选择最短路. 贝茜所在的 ...

  8. bzoj1726:[Usaco2006 Nov]Roadblocks 次短路

    Description 贝茜把家搬到了一个小农场,但她常常回到FJ的农场去拜访她的朋友.贝茜很喜欢路边的风景,不想那么快地结束她的旅途,于是她每次回农场,都会选择第二短的路径,而不象我们所习惯的那样, ...

  9. BZOJ 1726: [Usaco2006 Nov]Roadblocks第二短路 Dijkstra

    Description 贝茜把家搬到了一个小农场,但她常常回到FJ的农场去拜访她的朋友.贝茜很喜欢路边的风景,不想那么快地结束她的旅途,于是她每次回农场,都会选择第二短的路径,而不象我们所习惯的那样, ...

随机推荐

  1. 数据库学习笔记(二)MySQL数据库进阶

    MySQL 进阶 关于连表 左右连表: join 上下连表: union #自动去重 (当两张表里的数据,有重复的才会自动去重) union all #不去重 #上下连表示例: select sid, ...

  2. 01-16委托Func

    在类中编写方法: 在主函数中调用函数: 效果图:

  3. 前端seo小结,网页代码优化

    seo的目的:提高网站流量 search engine optimization 搜索引擎优化seo search engine marketing 搜索引擎营销sem 权重10个等级 等级越大,权重 ...

  4. hibernate学习笔记(3)hibernate常用配置以及session对象

    更改hibernate.cfg.xml的内容,常用配置有: <!--  把hibernate运行时的SQL语句显示到控制台  --> <property name="sho ...

  5. 百度Apollo解析——1.总介绍

    1. 概括 Apollo源码主要是c++实现的,也有少量python,主要程序在apollo/modules目录中,共18个包,功能包17个: 其中每个模块的作用如下: apollo/modules/ ...

  6. docker创建容器打开两个端口

     docker run -d -it --name c6_3 -v :/mnt -p 5000:8000 -p 3000  centos  注释: -v 后面为共享文件夹

  7. 关于pdf阅读器的选择

    如果只是想简单阅读不做学习笔记.标注之类的 可以直接用chrome firefox打开,它们内部有一个pdf.js实现了pdf标准可以直接阅读. 如果是要批注pdf,就和在纸质书上做笔记.添加书签,那 ...

  8. Luogu 2151 [SDOI2009]HH去散步

    BZOJ 1875 矩阵乘法加速递推. 如果不要求不能走同一条边,那么直接构造出矩阵快速幂即可,但是不走相同的道路,怎么办? 发现边数$m$也很小,我们直接把$2 * m$开成一个矩阵,相当于记录上一 ...

  9. WOJ 39 塌陷的牧场

    感觉……做克老师的题,都很神仙…… 还有去年一个人坐在家里写挂60分算法的惨痛记忆,凭借着一点点记忆重新写这道题. 感觉这并查集真的很神仙,仍然不会算最后的α的复杂度……自己想感觉无论如何都要挂个lo ...

  10. then方法

    sendSMS(phoneNo).then(function(data) { var msg = (data && data['msg']) ? data['msg'] : '验证码已 ...