find the most comfortable road

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 3686    Accepted Submission(s): 1565
Problem Description
XX星有很多城市,城市之间通过一种奇怪的快速公路SARS(Super Air Roam Structure---超级空中漫游结构)进行交流,每条SARS都对行驶在上面的Flycar限制了固定的Speed,同一时候XX星人对 Flycar的“舒适度”有特殊要求。即乘坐过程中最快速度与最低速度的差越小乘坐越舒服 ,(理解为SARS的限速要求。flycar必须瞬间提速/降速,痛苦呀 ),

但XX星人对时间却没那么多要求。要你找出一条城市间的最舒适的路径。(SARS是双向的)。

 
Input
输入包含多个測试实例。每一个实例包含:

第一行有2个正整数n (1<n<=200)和m (m<=1000),表示有N个城市和M条SARS。

接下来的行是三个正整数StartCity,EndCity,speed,表示从表面上看StartCity到EndCity,限速为speedSARS。speed<=1000000

然后是一个正整数Q(Q<11),表示寻路的个数。

接下来Q行每行有2个正整数Start,End, 表示寻路的起终点。

 
Output
每一个寻路要求打印一行。仅输出一个非负整数表示最佳路线的舒适度最快速与最低速的差。假设起点和终点不能到达,那么输出-1。
 
Sample Input
  1. 4 4
  2. 1 2 2
  3. 2 3 4
  4. 1 4 1
  5. 3 4 2
  6. 2
  7. 1 3
  8. 1 2
 
Sample Output
  1. 1
  2. 0

题意:求联通路中的最小速度差。

题解:先按边权从小到大排序,再用并查集枚举。

2014-11-2 22:38:14更新

  1. /*
  2. ** 用并查集每次选择一些权值最接近的边组合使得源点跟终点联通
  3. */
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include <algorithm>
  7.  
  8. #define maxn 210
  9. #define maxm 1010
  10. #define inf 0x3f3f3f3f
  11.  
  12. int pre[maxn], id;
  13. struct Node {
  14. int u, v, w;
  15. } E[maxm];
  16.  
  17. int min(int a, int b) {
  18. return a < b ?
  19.  
  20. a : b;
  21. }
  22.  
  23. bool cmp(Node a, Node b) {
  24. return a.w > b.w;
  25. }
  26.  
  27. int ufind(int k) {
  28. int a = k, b;
  29. while(pre[k]) k = pre[k];
  30. while(a != k) {
  31. b = pre[a];
  32. pre[a] = k;
  33. a = b;
  34. }
  35. return k;
  36. }
  37.  
  38. bool same(int a, int b) {
  39. return ufind(a) == ufind(b);
  40. }
  41.  
  42. void unite(int a, int b) {
  43. a = ufind(a);
  44. b = ufind(b);
  45. if(a != b) pre[a] = b;
  46. }
  47.  
  48. void addEdge(int u, int v, int w) {
  49. E[id].u = u;
  50. E[id].v = v;
  51. E[id++].w = w;
  52. }
  53.  
  54. int main() {
  55. int n, m, i, a, b, c, j, q, ans;
  56. while(scanf("%d%d", &n, &m) == 2) {
  57. for(i = id = 0; i < m; ++i) {
  58. scanf("%d%d%d", &a, &b, &c);
  59. addEdge(a, b, c);
  60. }
  61. std::sort(E, E + m, cmp);
  62. scanf("%d", &q);
  63. while(q--) {
  64. scanf("%d%d", &a, &b);
  65. ans = inf;
  66. for(i = 0; i < m; ++i) {
  67. memset(pre, 0, sizeof(int) * (n + 1));
  68. for(j = i; j < m; ++j) {
  69. unite(E[j].u, E[j].v);
  70. if(same(a, b)) {
  71. ans = min(ans, E[i].w - E[j].w);
  72. break;
  73. }
  74. }
  75. if(ans == inf) break; // cut
  76. }
  77. if(ans == inf) ans = -1;
  78. printf("%d\n", ans);
  79. }
  80. }
  81. return 0;
  82. }

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <limits.h>
  4. #include <algorithm>
  5. #define maxn 202
  6. #define maxm 1002
  7. using std::sort;
  8. using std::min;
  9.  
  10. int pre[maxn];
  11. struct Node{
  12. int u, v, cost;
  13. } E[maxm];
  14.  
  15. int ufind(int k)
  16. {
  17. int a = k, b;
  18. while(pre[k] != -1) k = pre[k];
  19. while(a != k){
  20. b = pre[a];
  21. pre[a] = k;
  22. a = b;
  23. }
  24. return k;
  25. }
  26.  
  27. bool cmp(Node a, Node b){
  28. return a.cost < b.cost;
  29. }
  30.  
  31. int main()
  32. {
  33. int n, m, q, a, b, i, j, x, y, ans;
  34. while(scanf("%d%d", &n, &m) == 2){
  35. for(i = 0; i < m; ++i)
  36. scanf("%d%d%d", &E[i].u, &E[i].v, &E[i].cost);
  37. sort(E, E + m, cmp);
  38. scanf("%d", &q);
  39. while(q--){
  40. scanf("%d%d", &a, &b);
  41. ans = INT_MAX;
  42. for(i = 0; i < m; ++i){
  43. memset(pre, -1, sizeof(pre));
  44. for(j = i; j < m; ++j){
  45. x = ufind(E[j].u);
  46. y = ufind(E[j].v);
  47. if(x != y) pre[x] = y;
  48. if(ufind(a) == ufind(b)){
  49. ans = min(ans, E[j].cost - E[i].cost);
  50. break;
  51. }
  52. }
  53. }
  54. if(ans == INT_MAX) printf("-1\n");
  55. else printf("%d\n", ans);
  56.  
  57. }
  58. }
  59. return 0;
  60. }

HDU1598 find the most comfortable road 【并查集】+【枚举】的更多相关文章

  1. hdu 1598 find the most comfortable road (并查集+枚举)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1598 find the most comfortable road Time Limit: 1000/ ...

  2. HDU 1598 find the most comfortable road 并查集+贪心

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1598 find the most comfortable road Time Limit: 1000 ...

  3. hdu 1598 find the most comfortable road (并查集)

    find the most comfortable road Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  4. 最舒适的路(并查集+枚举)(hdu1598)

    hdu1598 find the most comfortable road Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768 ...

  5. hdu1598 find the most comfortable road (枚举)+【并查集】

    <题目链接> 题目大意: XX星有许多城市,城市之间通过一种奇怪的高速公路SARS(Super Air Roam Structure---超级空中漫游结构)进行交流,每条SARS都对行驶在 ...

  6. hdu 1598 find the most comfortable road(并查集+枚举)

    find the most comfortable road Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  7. HDU-1598 find the most comfortable road

    find the most comfortable road Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  8. [HDU1598]find the most comfortable road

    思路: 考虑一个暴力:枚举最大的边权和最小的边权,然后将边权在这之间的边全拿出来构成一张无向图,剩下的就是判断是否存在一条从$S$到$T$的路径.相当于判$S$和$T$是否连通,用并查集连一下即可.时 ...

  9. hdu-5861 Road(并查集)

    题目链接: Road Time Limit: 12000/6000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others) Pro ...

随机推荐

  1. 【吐槽】关于256个 class可以覆盖一个id的问题

    还是说今天下午面试的事情,被面试官问了 40多分钟的问题,我觉得丫 一定是从哪个网站down了几份面试题,自个儿整合了一下,然后挨个问,刚开始感觉哟,不错哦,面试官懂的蛮多的. 然后问到某个问题之后, ...

  2. python模块导入的方法与区别

    import ..   #导入整个模块 from .. import .. #导入模块中的类.函数或者变量 from .. import *  #导入模块中的所有公开成员 from .. import ...

  3. nodeCZBK-笔记1

    [TOC] ****************************** day01 node简介 Node.js是一个让JavaScript运行在服务器端的开发平台. node就是一个js的执行环境 ...

  4. [Intel Edison开发板] 06、Edison开发在linux中烧写、配置、搭建开发环境

    1.前言 linux上烧写.配置.搭建Edison环境,千万不要用默认的setup tool for ubuntu!!! (即使,你用的就是ubuntu) 因为,其默认的工具会从一个坏链接下载配置文件 ...

  5. C#移位运算(左移和右移)

    C#是用<<(左移) 和 >>(右移) 运算符是用来执行移位运算. 左移 (<<) 将第一个操作数向左移动第二个操作数指定的位数,空出的位置补0.  左移相当于乘. ...

  6. C#值参数和引用参数

    一.值参数 未用ref或out修饰符声明的参数为值参数. 使用值参数,通过将实参的值复制到形参的方式,把数据传递到方法.方法被调用时,系统做如下操作. 在栈中为形参分配空间. 复制实参到形参. 值参数 ...

  7. Python 集合整理

  8. [读书笔记]javascript语言精粹'

    人比较笨,以前只做项目,案例,然而一些javascript的很多理论不知道该怎么描述,所以最近开启一波读书之旅: 标识符 1.定义 标识符以字母开头,可能后面跟上一个或多个字母.数字或者下划线. 2. ...

  9. 关于苹果APP的上架整理

    由于苹果的机制,在非越狱机器上安装应用必须通过官方的App Store,开发者开发好应用后上传App Store,也需要通过审核等环节.AppCan作为一个跨主流平台的一个开发平台,也对ipa包上传A ...

  10. redis配置文件之复制

    主从复制使用slaveof将Redis实例作为另一个Redis服务器的副本. 1) Redis复制是异步的,master可以配置成如果它连接的slave没有达到给定的数量,就停止接受写入.2) 如果断 ...