• find the most comfortable road


    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>
     4 using namespace std;
     5 const int INF = 0x3f3f3f3f;
     6 
     7 int n,m,set[210];
     8 struct Edge
     9 {
    10     int u,v;
    11     int w;
    12 } edge[1010];
    13 int cmp(const struct Edge a, const struct Edge b)
    14 {
    15     return a.w < b.w;
    16 }
    17 void init()
    18 {
    19     for(int i = 1; i <= n; i++)
    20         set[i] = i;
    21 }
    22 int find(int x)
    23 {
    24     if(set[x] != x)
    25         set[x] = find(set[x]);
    26     return set[x];
    27 }
    28 void merge(int x, int y)
    29 {
    30     int xx = find(x);
    31     int yy = find(y);
    32     if(xx != yy)
    33         set[xx] = yy;
    34 }
    35 int main()
    36 {
    37     int i,j;
    38 
    39     while(~scanf("%d %d",&n,&m))
    40     {
    41         for(i = 0; i < m; i++)
    42             scanf("%d %d %d",&edge[i].u,&edge[i].v,&edge[i].w);
    43         sort(edge,edge+m,cmp);
    44         
    45         int test;
    46         scanf("%d",&test);
    47         while(test--)
    48         {
    49             int s,t;
    50             scanf("%d %d",&s,&t);
    51             int ans = INF;
    52             for(i = 0; i < m; i++)
    53             {
    54                 init();
    55                 for(j = i; j < m; j++)
    56                 {
    57                     merge(edge[j].u,edge[j].v);
    58                     if(find(s) == find(t))
    59                         break;
    60                 }
    61                 if(j >= m)
    62                     break;
    63                 if(ans > edge[j].w-edge[i].w)
    64                     ans = edge[j].w-edge[i].w;
    65             }
    66             if(ans < INF)
    67                 printf("%d
    ",ans);
    68             else printf("-1
    ");
    69         }
    70     }
    71     return 0;
    72 }
    View Code
     
  • 相关阅读:
    VI服务器
    LabVIEW编程技巧:网络通信中如何获取计算机名称、IP地址等信息
    Labview 局部变量
    TL431的几种常用用法
    s8550引脚图与电路图汇总分析
    齐二TK6916/20/26/32系列数控落地铣镗床简介8
    VBA Format函数 自定义格式中 0/#的区别
    [Excel VBA] Shape.Type属性名称及对应值列表
    如何另存(保存)不含宏
    我想一次性选择(或复制)工作簿中的多张表到另一工作簿
  • 原文地址:https://www.cnblogs.com/LK1994/p/3344010.html
Copyright © 2020-2023  润新知