题目连接:

  http://www.lightoj.com/volume_showproblem.php?problem=1002

题目描述:

  有n个城市,从0到n-1开始编号,n个城市之间有m条边,中心城市为t,问每个城市到中心城市的最小路径的花费,路径花费大小的定义为:一条路上花费最大的边的值。

解题思路:

  Dijkstra的变形,用Dijkstra求出来的单源路径可以保证每条边都是最优的,所以最短路上的最长边就是所求。

  1. #include <algorithm>
  2. #include <iostream>
  3. #include <cstdio>
  4. #include <cstring>
  5. using namespace std;
  6.  
  7. const int maxn = ;
  8. const int INF = 0x3f3f3f3f;
  9. int map[maxn][maxn], dist[maxn];
  10. void init ()
  11. {
  12. int i, j;
  13. for (i=; i<maxn; i++)
  14. for (j=; j<maxn; j++)
  15. if (i==j)
  16. map[i][j] = ;
  17. else
  18. map[i][j] = INF;
  19. }
  20. void dijkstra (int s, int n)
  21. {
  22. int i, j, vis[maxn];
  23. memset (vis, , sizeof(vis));
  24.  
  25. for (i=; i<n; i++)
  26. dist[i] = map[s][i];
  27. vis[s] = ;
  28.  
  29. for (i=; i<n; i++)
  30. {
  31. int mini = INF, index;
  32. for (j=; j<n; j++)
  33. if (!vis[j] && mini > dist[j])
  34. {
  35. mini = dist[j];
  36. index = j;
  37. }
  38. if (mini == INF)
  39. return ;
  40. vis[index] = ;
  41. for (j=; j<n; j++)
  42. if (!vis[j])
  43. {
  44. dist[j] = min(dist[j], max(map[index][j],dist[index]));//重点
  45. }
  46. }
  47. }
  48. int main ()
  49. {
  50. int T, n, m, l = ;
  51. scanf ("%d", &T);
  52. while (T --)
  53. {
  54. init ();
  55. scanf ("%d %d", &n, &m);
  56. while (m --)
  57. {
  58. int u, v, w;
  59. scanf ("%d %d %d", &u, &v, &w);
  60. if (map[u][v] > w)//有重边,选最优
  61. map[u][v] = map[v][u] = w;
  62. }
  63. int t;
  64. scanf ("%d", &t);
  65. dijkstra (t, n);
  66. printf ("Case %d:\n", l ++);
  67. for (int i=; i<n; i++)
  68. if (dist[i] != INF)
  69. printf ("%d\n", dist[i]);
  70. else
  71. printf ("Impossible\n");
  72. }
  73. return ;
  74. }

Light oj 1002 Country Roads (Dijkstra)的更多相关文章

  1. 1002 - Country Roads(light oj)

    1002 - Country Roads I am going to my home. There are many cities and many bi-directional roads betw ...

  2. Lightoj 1002 - Country Roads(prim算法)

    I am going to my home. There are many cities and many bi-directional roads between them. The cities ...

  3. 【lightoj-1002】Country Roads(dijkstra变形)

    light1002:传送门 [题目大意] n个点m条边,给一个源点,找出源点到其他点的‘最短路’ 定义:找出每条通路中最大的cost,这些最大的cost中找出一个最小的即为‘最短路’,dijkstra ...

  4. Light oj-1002 - Country Roads,迪杰斯特拉变形,不错不错~~

                                                                                               1002 - Co ...

  5. Light OJ 1316 A Wedding Party 最短路+状态压缩DP

    题目来源:Light OJ 1316 1316 - A Wedding Party 题意:和HDU 4284 差点儿相同 有一些商店 从起点到终点在走过尽量多商店的情况下求最短路 思路:首先预处理每两 ...

  6. Light OJ 1114 Easily Readable 字典树

    题目来源:Light OJ 1114 Easily Readable 题意:求一个句子有多少种组成方案 仅仅要满足每一个单词的首尾字符一样 中间顺序能够变化 思路:每一个单词除了首尾 中间的字符排序 ...

  7. Light OJ 1429 Assassin`s Creed (II) BFS+缩点+最小路径覆盖

    题目来源:Light OJ 1429 Assassin`s Creed (II) 题意:最少几个人走全然图 能够反复走 有向图 思路:假设是DAG图而且每一个点不能反复走 那么就是裸的最小路径覆盖 如 ...

  8. Light OJ 1406 Assassin`s Creed 减少国家DP+支撑点甚至通缩+最小路径覆盖

    标题来源:problem=1406">Light OJ 1406 Assassin`s Creed 意甲冠军:向图 派出最少的人经过全部的城市 而且每一个人不能走别人走过的地方 思路: ...

  9. light oj 1007 Mathematically Hard (欧拉函数)

    题目地址:light oj 1007 第一发欧拉函数. 欧拉函数重要性质: 设a为N的质因数.若(N % a == 0 && (N / a) % a == 0) 则有E(N)=E(N ...

随机推荐

  1. Eclipse的Servers视图中无法添加Tomcat6/Tomcat7

    原文:http://blog.csdn.net/blueheart20/article/details/40043749 问题的提出: 无法从以下方式,添加Tomcat服务器.  其中ServerNa ...

  2. google官方建议使用的网站性能测试工具

    转自:http://www.laokboke.net/2013/05/12/google-official-recommended-site-performance-testing-tools/ 最近 ...

  3. HDU 1272: 小希的迷宫(并查集)

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  4. 微信小程序之 页面跳转 及 调用本地json的假数据调试

    一.微信小程序 跳转页面 小程序页面有2种跳转,可以在wxml页面或者js中: (1)在wxml页面中: <navigator url="../index/index"> ...

  5. hdoj 1533 Going Home 【最小费用最大流】【KM入门题】

    Going Home Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

  6. unix时间戳(unix timestamp)与北京时间的互转方法

    1.在linux bash下北京时间与unix时间戳互转: 获取unix timestamp: 命令:date "+%s" 输出:1372654714 获取北京时间: 命令:dat ...

  7. 【Mongodb教程 第十五课 】MongoDB 限制记录

    Limit() 方法 要限制 MongoDB 中的记录,需要使用 limit() 方法. limit() 方法接受一个数字型的参数,这是要显示的文档数. 语法: limit() 方法的基本语法如下 & ...

  8. STL_算法_最小值和最大值(min_element、max_element)

    C++ Primer 学习中... 简单记录下我的学习过程 (代码为主) min_element.max_element  找最小.最大值. 非常easy没什么大作用 #include<iost ...

  9. nhibernate实体类主键ID赋值问题

    有个同事忽然来找我,说他遇到了一个问题,在调用nhibernate 进行update数据的时候报错,说是有数据行锁定. 看代码,没啥问题. 直接在PL/SQL developer里对数据库进行插入,也 ...

  10. [BZOJ2144]国家集训队 跳跳棋

    题目描述 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子. 我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置.我们要通过最少的跳动把他们的位置移动 ...