zoukankan      html  css  js  c++  java
  • hdu 1598 find the most comfortable road (并查集+枚举)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1598

    find the most comfortable road

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


    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 <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 using namespace std;
     5 struct node
     6 {
     7     int s,d,f;
     8 } p[1010];
     9 
    10 int father[210];
    11 const int INF=9999999;
    12 
    13 void set(int n)
    14 {
    15     for (int i=1; i<=n; i++)
    16         father[i]=i;
    17 }
    18 
    19 bool cmp(const node &a,const node &b)
    20 {
    21     return a.f<b.f;
    22 }
    23 
    24 int find(int a)
    25 {
    26     if (father[a]==a)return a;
    27     return father[a]=find(father[a]);
    28 }
    29 
    30 void Union(int x,int y)
    31 {
    32     x=find(x);
    33     y=find(y);
    34     if (x!=y)
    35         father[x]=y;
    36 }
    37 
    38 int main ()
    39 {
    40     int n,m,Min;
    41     while (~scanf("%d%d",&n,&m))
    42     {
    43         for (int i=1; i<=m; i++)
    44         {
    45             scanf("%d%d%d",&p[i].s,&p[i].d,&p[i].f);
    46         }
    47         sort(p+1,p+m+1,cmp);
    48         int q;
    49         scanf("%d",&q);
    50         while (q--)
    51         {
    52             int a,b,ans,i,j;
    53             Min=INF;
    54             scanf("%d%d",&a,&b);
    55             for (i=1; i<=m; i++)
    56             {
    57                 set(n);
    58                 for (j=i; j<=m; j++)
    59                 {
    60                     Union(p[j].s,p[j].d);
    61                     if (find(a)==find(b))
    62                         break;
    63                 }
    64                 if(j==m+1)
    65                // printf ("-1
    ");
    66                 break;
    67                 ans=p[j].f-p[i].f;
    68                 if (Min>ans)
    69                 {
    70                     Min=ans;
    71                 }
    72             }
    73 
    74             if(Min==INF)
    75                 printf("-1
    ");
    76             else
    77                 printf("%d
    ",Min);
    78         }
    79     }
    80     return 0;
    81 }
  • 相关阅读:
    linux命令行
    mybatis中#{}和${}的区别
    @InitBinder的作用
    mui 实用封装销毁页面
    【SQLite】简单的基本使用步骤
    常用的一些操作方法
    【HttpWeb】Post和GET请求基本封装
    【接口验证】特性验证参数
    小谈单例模式
    vs下开端口直接调试iis
  • 原文地址:https://www.cnblogs.com/qq-star/p/3939196.html
Copyright © 2011-2022 走看看