HDU 1598 find the most comfortable road

来源:互联网 发布:用友软件公司地址 编辑:程序博客网 时间:2024/05/17 08:36

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 41 2 22 3 41 4 13 4 221 31 2
 

Sample Output

10
#include <cstdio>#include<iostream>#include<algorithm>using namespace std;const int N = 210;const int M = 1010;const int INF =0X3f3f3f;int father[M];struct node{    int x,y;    int s;}a[M];int cmp(node a,node b){    return a.s<b.s;}void Init(){    int i;    for(i=0;i<M;i++)    {        father[i]=i;    }}int Find(int i){    if(father[i]!=i)        father[i]=Find(father[i]);    return father[i];}void Merge(int x,int y){    int i,j;    i=Find(x);    j=Find(y);    if(i!=j)    {        father[i]=j;    }}int main(){    int n,m,i,j,k,ans;    while(scanf("%d%d",&n,&m)!=EOF)    {        memset(a,0,sizeof(a));        for(i=0;i<m;i++)        {            scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].s);        }        sort(a,a+m,cmp);        scanf("%d",&k);        while(k--)        {            int begin,end,fa,fb;            scanf("%d%d",&begin,&end);            ans=INF;//初始化            for(i=0;i<m;i++)            {                Init();//每次找的时候都得初始化                for(j=i;j<m;j++)                {                    Merge(a[j].x,a[j].y);//向里面加入点                    fa=Find(begin);                    fb=Find(end);                    if(fa==fb)//判断是否连接上了                    {                        break;                    }                }                if(j==m)//说明这两个点之间没有路径连接                {                    break;                }                if(ans>a[j].s-a[i].s)                {                    ans=a[j].s-a[i].s;                }            }            if(ans==INF)            {                printf("-1\n");            }            else            {                printf("%d\n",ans);            }        }    }    return 0;}


0 0
原创粉丝点击