find the most comfortable road
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 272 Accepted Submission(s): 128
Problem Description
XX星有许多城市,城市之间通过一种奇怪的高速公路SARS(Super Air Roam Structure—超级空中漫游结构)进行交流,每条SARS都对行驶在上面的Flycar限制了固定的Speed,同时XX星人对 Flycar的“舒适度”有特殊要求,即乘坐过程中最高速度与最低速度的差越小乘坐越舒服 ,(理解为SARS的限速要求,flycar必须瞬间提速/降速,痛苦呀 ),
但XX星人对时间却没那么多要求。要你找出一条城市间的最舒适的路径。(SARS是双向的)。
Input
输入包括多个测试实例,每个实例包括:
第一行有2个正整数n (1
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string>
#include<string.h>
#include<math.h>
using namespace std;
typedef struct Edge
{
int u,v,len;
}Edge;
int fa[205];
bool cmp(Edge A,Edge B)
{
return A.len < B.len;
}
int fid(int x)
{
if(x != fa[x])
fa[x] = fid(fa[x]);
return fa[x];
}
int main(void)
{
// freopen("in.txt","r",stdin);
int n,m,q;
while(scanf("%d %d",&n,&m) != EOF)
{
Edge edg[m+1];
for(int i=0; i<m; ++i)
scanf("%d %d %d",&edg[i].u,&edg[i].v,&edg[i].len);
sort(edg,edg+m,cmp);
scanf("%d",&q);
for(int i=0; i<q; ++i)
{
int st,ed;
scanf("%d %d",&st,&ed);
int ans=9999999,flg=0;
for(int i=0; i<m; ++i)
{
for(int k=1; k<=n; ++k)
fa[k] = k;
flg=0;
for(int j=i; j<m; ++j)
{
int xx = fid(edg[j].u);
int yy = fid(edg[j].v);
if(xx != yy)
fa[xx] = yy;
else
continue;
if(fid(st) == fid(ed))
{
flg = j;
break;
}
}
if(!flg) break;
ans = min(ans,edg[flg].len - edg[i].len);
}
if(ans != 9999999)
cout << ans <<endl;
else
cout << "-1"<<endl;
}
}
return 0;
}