PIPIOJ 1484: 环路系统【枚举+并查集】

题目链接:
戳我

题目描述:
在2077年,CS市已经不使用公路了,而是通过“环路”系统让各个地区实现连通,每一条环路都是双向的并且有一个固定的速度。这一天,PIPI驾驶着他的Tesla Model SSS准备从地区A开往地区B,相比于缩短时间,PIPI更希望在驾驶过程中行驶速度保持稳定,即行驶过程中最高速度和最低速度的差值越小越好(因为突然地提速/减速确实会让PIPI的驾驶体验很差)。

输入:
第一行输入CS市中的地区数量N和环路数量M(2≤N≤500 ,1≤M≤2000)。
接下来M行输入每条环路的起点s, 终点t, 速度speed 以及长度 len (1≤s,t≤N, s≠t, 1≤speed, len≤1e5)。
接下来一行输入一个整数Q,代表有Q次询问(1≤Q≤10)。
接下来Q行每行输入两个数字 u, v,代表PIPI想从地区u开往地区v(1≤u,v≤N)。

输出:
对于每个询问,输出PIPI行驶过程中最高速度和最低速度的差值。如果无法到达,则输出-1。

样例输入:
4 4
1 2 2 1
2 3 4 2
1 4 1 3
3 4 2 4
2
1 3
1 2

样例输出:
1
0

样例示意图:
在这里插入图片描述

题目思路:
我们先把所有的边按速度权值从小到大排列,然后我们枚举每条边,以这条边为起边,再枚举这条边后边的权值比它大的边(同时要合并这条边联结的两个点),直到枚举到了一条边之后,起点和终点联通了,说明这两条边可以联通这条路,就可以用后面的速度权值大的边-速度权值小的边了。

c语言参考代码:

#include <stdio.h>
#include <stdlib.h>

#define MAX 501
#define INF 0x3f3f3f3f

int n,m;
int parent[MAX];

typedef struct{
   
	int x,y;
	int v,w;
}Edge,*edge;

Edge map[2001];

int min(int x,int y)
{
   <
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值