【问题描写叙述】



    X城有一个含有N个节点的通信网络,在通信中,我们往往关心信息从一个节点I传输到节点J的最短路径。遗憾的是。因为种种原因,线路中总有一些节点会出故障,因此在传输中要避开故障节点。

任务一:在己知故障节点的情况下。求避开这些故障节点。从节点I到节点J的最短路径S0。

任务二:在不考虑故障节点的情况下。求从节点I到节点J的最短路径S1、第二最短路径S2。



【输入文件】



第1行: N I J (节点个数 起始节点 目标节点)

第2—N+1行: Sk1 Sk2…SkN (节点K到节点J的距离为SkJ K=1,2,……。N)

最后一行: P T1 T2……Tp (故障节点的个数及编号)



【输出文件】



S0 S1 S2 (S1<=S2 从节点I到节点J至少有两条不同路径)



【输入输出例子】

file=/2397/mod_programming/intro/t1-01.jpg" height="258" width="438" alt="" style="border:0px">

lyxzwt.in



5 1 5

0 10 5 0 0

10 0 0 6 20

5 0 0 30 35

0 6 30 0 6

0 20 35 6 0

1 2



lyxzwt.out



40 22 30



【约束条件】



(1)N<=50 N个节点的编号为1。2,…,N

(2)Skj为整数。Skj<=100,(K,J=1,2…,N 若Skj=0表示节点K到节点J没线路)

(3)P<=5

求出记录最短路的一条路径。然后删边求次短路。

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <iostream>
  4. #include <algorithm>
  5. using namespace std;
  6. const int maxn = 100;
  7. const int INF = 1e9;
  8.  
  9. int g[maxn][maxn];
  10. int d[maxn], pre[maxn], p[maxn], P, n, s, t;
  11. int path[maxn][2], e;
  12. bool vis[maxn];
  13.  
  14. void init()
  15. {
  16. scanf("%d%d%d", &n, &s, &t);
  17. for(int i=1; i<=n; ++i) {
  18. for(int j=1; j<=n; ++j) {
  19. scanf("%d", &g[i][j]);
  20. if(g[i][j]==0) {
  21. g[i][j] = INF;
  22. }
  23. }
  24. }
  25. scanf("%d", &P);
  26. for(int i=1; i<=n; ++i) scanf("%d", &p[i]);
  27. }
  28.  
  29. int dijkstra()
  30. {
  31. for(int i=1; i<=n; ++i) d[i] = INF;
  32. memset(pre, -1, sizeof pre );
  33. memset(vis, 0, sizeof vis );
  34. d[s] = 0;
  35. for(int i=1; i<=n; ++i) {
  36. int k = -1;
  37. for(int j=1; j<=n; ++j) if(!vis[j] &&(k==-1||d[j]<d[k]) ) {
  38. k = j;
  39. }
  40. if(-1==k) break;
  41. vis[k] = 1;
  42. for(int j=1; j<=n; ++j) if(!vis[j]&&d[j]>d[k]+g[k][j]) {
  43. d[j] = d[k] + g[k][j];
  44. pre[j] = k;
  45. }
  46. }
  47. return d[t];
  48. }
  49.  
  50. void solve()
  51. {
  52. int s0, s1, s2;
  53. s1 = dijkstra();
  54. int u = t;
  55. e = 0;
  56. while(~pre[u]){
  57. path[e][0] = u;
  58. path[e][1] = pre[u];
  59. e++;
  60. u = pre[u];
  61. }
  62. s2 = INF;
  63. for(int i=0; i<e; ++i){
  64. int &u = path[i][0], &v = path[i][1];
  65. int tmp = g[u][v];
  66. g[u][v] = g[v][u] = INF;
  67. int res = dijkstra();
  68. g[u][v] = g[v][u] = tmp;
  69. s2 = min(s2, res);
  70.  
  71. }
  72.  
  73. for(int i=1; i<=P; ++i){
  74. int &u = p[i];
  75. for(int v=1; v<=n; ++v)
  76. g[u][v] = g[v][u] = INF;
  77. }
  78. s0 = dijkstra();
  79. printf("%d %d %d\n", s0, s1, s2);
  80. }
  81.  
  82. int main()
  83. {
  84. freopen("lyxzwt.in", "r", stdin);
  85. freopen("lyxzwt.out", "w", stdout);
  86. init();
  87. solve();
  88. return 0;
  89. }

版权声明:本文博客原创文章,博客,未经同意,不得转载。

[HAOI2005]路由问题,第二短路的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. [模板] 次短路 | bzoj1726-[Usaco2006Nov]Roadblocks第二短路

    简介 所谓次短路, 顾名思义, 就是第二短路. :P 1到n的次短路长度必然产生于:1到x的最短路 + edge(x,y) + y到n的最短路 简单证明一下: 设 \(dis(i,j)\) 表示 \( ...

  7. 关于宽带接两台路由,并且第二台需要关闭DHCP的设置

    关于宽带接两台路由,并且第二台需要关闭DHCP的设置 https://wenku.baidu.com/view/e317a12d4b35eefdc8d333cb?pcf=2#1

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

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

  9. [Usaco2006 Nov]Roadblocks第二短路

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

  10. 最短路【bzoj1726】: [Usaco2006 Nov]Roadblocks第二短路

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

随机推荐

  1. 《Javascript高级程序设计》读书笔记之继承

    1.原型链继承 让构造函数的原型对象等于另一个类型的实例,利用原型让一个引用类型继承另一个引用类型的属性和方法 function SuperType() { this.property=true; } ...

  2. &#39;Basic&#39; attribute type should not be a persistence entity/a container

    正在使用IDEA进行HIbernate开发时间,从datasource由此产生的实体映射不理想.需要手动更改. 投身于实体类的属性Setter时间.临时有红tip:'Basic' attribute ...

  3. 领域驱动设计(DDD)部分核心概念的个人理解(转)

    领域驱动设计(DDD)是一种基于模型驱动的软件设计方式.它以领域为核心,分析领域中的问题,通过建立一个领域模型来有效的解决领域中的核心的复杂问题.Eric Ivans为领域驱动设计提出了大量的最佳实践 ...

  4. 【POJ1741】Tree 树分而治之 模板略?

    做广告: #include <stdio.h> int main() { puts("转载请注明出处[vmurder]谢谢"); puts("网址:blog. ...

  5. ORACLE触发特定的解释

    ORACLE PL/SQL编程八: 把触发器说透 本篇主要内容例如以下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 ...

  6. “ddl”有一个无效 SelectedValue,因为它不在项目列表中。

    “ddl_ekt”有一个无效 SelectedValue,因为它不在项目列表中. 怎么回事 现象: 在用户控件的page_load事件里绑定下拉框,报上面错误 解决: 将下拉框绑定,放在page_In ...

  7. 程序员联盟有自己的论坛啦!基于Discuz构建,还不来注册~

    我把程序员联盟网站的论坛建好了,哈哈哈.用的是Discuz这个腾讯旗下的中文bbs建设软件.正在完善论坛,添加各种模块和应用.大家可以先去注册一下:coderunity.com/bbs/forum.p ...

  8. Metatable和Metamethod(转)

    Metatable和Metamethod是用来干啥的?它们可以使得表a和b的表达式“a + b”变得有意义,其中metatable使两个不相关的表a和b之间可以进行操作,而操作的具体行为比如说&quo ...

  9. crm创建基于fetch自己的自定义报告

    在解决方案资源管理器,右键点击"报表"目录.然后点击"增加了新的报告". 打开"报表向导". 在"欢迎来到报表向导"前, ...

  10. C# 开机自动启动程序

    原文:C# 开机自动启动程序 新建一个winform拖一个checkbox进来.. 然后设置它的changed事件. 已经测试过,可以直接复制使用. private void checkBox1_Ch ...