zoukankan      html  css  js  c++  java
  • HDU-1598 find the most comfortable road

                   find the most comfortable road

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2796    Accepted Submission(s): 1192

    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
    4 4
    1 2 2
    2 3 4
    1 4 1
    3 4 2
    2
    1 3
    1 2
     
    Sample Output
    1
    0
     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <algorithm>//sort函数一定要用c++
     4 #define M 1001
     5 #define inf 99999999
     6 using namespace std;
     7 int n,p[M];
     8 struct node
     9 {
    10  int from,to;
    11  int speed;
    12 }d[M];
    13 void init()
    14 {
    15  int i;
    16  for(i=1;i<=n;i++)
    17   p[i]=i;
    18 }
    19 int cmp(node a,node b)
    20 {
    21  return a.speed<b.speed;
    22 }
    23 int Find(int x)
    24 {
    25  if(p[x]!=x)
    26   p[x]=Find(p[x]);
    27  return p[x];
    28 }//找到同根。
    29 void Union(int x,int y)
    30 {
    31  x=Find(x);
    32  y=Find(y);
    33  if(x==y)
    34   return;
    35  p[x]=y;
    36 }//合并同根。
    37 int main()
    38 {
    39  int m,t,i,j,st,ed;
    40  while(scanf("%d%d",&n,&m)!=EOF)
    41  {
    42   for(i=0;i<m;i++)
    43    scanf("%d%d%d",&d[i].from,&d[i].to,&d[i].speed);
    44   sort(d,d+m,cmp);//sort函数用法。
    45   scanf("%d",&t);
    46   while(t--)
    47   {
    48    scanf("%d%d",&st,&ed);
    49    int ans=inf;
    50    for(i=0;i<m;i++)
    51    {
    52     init();//每次都要数组初始化。
    53     for(j=i;j<m;j++)
    54     {
    55      Union(d[j].from,d[j].to);
    56      int x=Find(st);
    57      int y=Find(ed);
    58      if(x==y)
    59       break;
    60     }
    61     if(j>=m)//j为什么要>;
    62      break;
    63     if(d[j].speed-d[i].speed<ans)
    64      ans=d[j].speed-d[i].speed;
    65    }
    66    printf("%d
    ",ans==inf?-1:ans);
    67   }
    68  }
    69  return 0;
    70 }
  • 相关阅读:
    Python
    保护模式(九):挂物理页
    保护模式(八):MmIsAddressValid逆向(PAE)
    保护模式(七):2-9-9-12分页
    保护模式(六):10-10-12分页(二)
    保护模式(五):10-10-12分页(一)
    保护模式(四):任务段与任务门
    保护模式(三):中断门与陷阱门
    保护模式(二):调用门
    保护模式(一):段描述符与段选择子
  • 原文地址:https://www.cnblogs.com/cancangood/p/3313252.html
Copyright © 2011-2022 走看看