题目
描述 Description
FC星有许多城市,城市之间通过一种奇怪的高速公路SARS(Super Air Roam Structure—超级空中漫游结构)进行交流,每条SARS都对行驶在上面的Flycar限制了固定的Speed,同时FC星人对 Flycar的“舒适度”有特殊要求,即乘坐过程中最高速度与最低速度的差越小乘坐越舒服 ,(理解为SARS的限速要求,flycar必须瞬间提速/降速,痛苦呀 ),但FC星人对时间却没那么多要求。要你找出一条城市间的最舒适的路径。(SARS是双向的)。
输入格式 Input Format
第一行有2个正整数n (1<n<201)和m (m<1001),表示有N个城市和M条SARS。
第二行是三个正整数StartCity,EndCity,speed,表示从表面上看StartCity到EndCity,限速为speed的SARS。然后是一个正整数Q(Q<11),表示寻路的个数。
接下来Q行每行有2个正整数Start,End, 表示寻路的起终点。
输出格式 Output Format
每个寻路要求打印一行,仅输出一个非负整数表示最佳路线的舒适度最高速与最低速的差。
如果无解,输出32475…(不要问为什么…我就是被这么坑的)
缩减过后的题面:找到一条路径满足两个要求:①起点可以到达终点;②使得这条路径上的 最 大 的 边 权 − 最 小 的 边 权 最大的边权-最小的边权 最大的边权−最小的边权 求得的值最小。
思路
- 对于上面①中的要求,因为题目中所给的路径是双向边,所以说只要找到一条路径中
有起点和终点就可以了
等价于
在并查集的操作中 g e t f a t h e r ( 起 点 ) = = g e t f a t h e r ( 终 点 ) getfather(起点)==getfather(终点) getfather(起点)==getfather(终点)【判断标志】 - 针对于要求②,那么也就很简单了,求一个生成森林(生成树)的最大权值减去最小权值所得结果的最小值, [小数据版] 边权差值最小的生成树,这道题也是数据不大的,
顺便推荐一波之前写的博客
代码
//2019.4.12
//melody
#include<bits/stdc++.h>
using namespace std;
int n,m,q;
int s,t;
int fa[300];
bool flag;
int minn,maxx,ans;
inline int read()
{
int x=0,f=1; char ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0'; ch=getchar();}
return x*f;
}
struct edge
{
int x,y,z;
}e[1010];
inline bool mycmp(edge x,edge y)
{
return x.z<y.z;
}
inline int gf(int x)
{
if(fa[x]==x) return x;
return fa[x]=gf(fa[x]);
}
int main()
{
n=read(); m=read();
for(int i=1;i<=m;++i)
{
e[i].x=read();
e[i].y=read();
e[i].z=read();
}
sort(e+1,e+1+m,mycmp);
q=read();
for(int w=1;w<=q;++w)
{
s=read(); t=read();
ans=1000000;
for(int i=1;i<=m;++i)//枚举每一条边
{
minn=e[i].z;
flag=false; flag1=false; flag2=false;
for(int k=1;k<=n;++k) fa[k]=k;
for(int j=i;j<=m;++j)
{
int xx=gf(e[j].x);
int yy=gf(e[j].y);
if(xx==yy) continue;
fa[xx]=yy;
if(gf(s)==gf(t))//①中的判断标志
{
flag=true;
maxx=e[j].z;
break;
}
}
if(flag==true) ans=min(ans,maxx-minn);
}
if(ans==1000000) cout<<32475<<endl;
else cout<<ans<<endl;
}
return 0;
}
啊啊啊啊啊啊啊啊,这道题卡了我很长时间的啊,第一次提交还是只有10分……(〃>皿<)
好吧,还是自己菜( ̄ー ̄)。。。
粘一个小句子:
"无论你考了多少分 能不能去你想去的学校 都不用担心 你能去的地方 会带给你你预想不到的惊喜 你会遇见一些人 觉得相见恨晚 或者遇到一个人觉得在哪里值得 这是命 遇见你该遇见的 接受你所不能改变的 中考高考的迷人之处 不是如愿以偿 而是阴差阳错 "
——网易云音乐《青春不打烊》热评
如果不能改变环境,那就改变自己吧!
完……