HDU 1598 find the most comfortable road 并查集+贪心
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1598
find the most comfortable road
Time Limit: 1000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)
#### 问题描述
> XX星有许多城市,城市之间通过一种奇怪的高速公路SARS(Super Air Roam Structure---超级空中漫游结构)进行交流,每条SARS都对行驶在上面的Flycar限制了固定的Speed,同时XX星人对 Flycar的“舒适度”有特殊要求,即乘坐过程中最高速度与最低速度的差越小乘坐越舒服 ,(理解为SARS的限速要求,flycar必须瞬间提速/降速,痛苦呀 ),
> 但XX星人对时间却没那么多要求。要你找出一条城市间的最舒适的路径。(SARS是双向的)。
#### 输入
> 输入包括多个测试实例,每个实例包括:
> 第一行有2个正整数n (1 接下来的行是三个正整数StartCity,EndCity,speed,表示从表面上看StartCity到EndCity,限速为speedSARS。speed 然后是一个正整数Q(Q 接下来Q行每行有2个正整数Start,End, 表示寻路的起终点。
#### 输出
> 每个寻路要求打印一行,仅输出一个非负整数表示最佳路线的舒适度最高速与最低速的差。如果起点和终点不能到达,那么输出-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
题解
并查集+贪心。
我们先对所有的边排序,然后对于每个查询,我们枚举开始的边,然后用并查集维护连通性,一旦目前的边足以连通查询的顶点对,那么说明这一轮的答案就出来了,像这样做m轮就能求出答案。最坏情况也就O(m^2)。
代码
#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
#define X first
#define Y second
#define mp make_pair
using namespace std;
const int maxn = 1e3+10;
const int INF = 0x3f3f3f3f;
int n, m;
int fa[maxn];
int find(int x) { return fa[x] = fa[x] == x ? x : find(fa[x]); }
struct Edge {
int u, v, w;
bool operator < (const Edge& tmp) const {
return w < tmp.w;
}
}egs[maxn];
int main() {
while (scanf("%d%d", &n, &m) == 2 && n) {
for (int i = 0; i < m; i++) {
scanf("%d%d%d", &egs[i].u, &egs[i].v, &egs[i].w);
}
sort(egs, egs + m);
int q;
scanf("%d", &q);
while (q--) {
int s, d;
scanf("%d%d", &s, &d);
int ans = INF;
for (int i = 0; i < m; i++) {
for (int i = 1; i <= n; i++) fa[i] = i;
for (int j = i; j < m; j++) {
Edge& e = egs[j];
int pu = find(e.u);
int pv = find(e.v);
if (pu != pv) {
fa[pv] = pu;
}
if (find(s) == find(d)) {
ans = min(ans, egs[j].w - egs[i].w);
break;
}
}
}
if (ans < INF) printf("%d\n", ans);
else puts("-1");
}
}
return 0;
}
Notes
很多枚举区间的问题,排序之类的预处理一下,一般只要枚举上界就可以了。
HDU 1598 find the most comfortable road 并查集+贪心的更多相关文章
- hdu 1598 find the most comfortable road (并查集+枚举)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1598 find the most comfortable road Time Limit: 1000/ ...
- hdu 1598 find the most comfortable road (并查集)
find the most comfortable road Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- hdu 1598 find the most comfortable road(枚举+卡鲁斯卡尔最小生成树)
find the most comfortable road Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- HDU 1598 find the most comfortable road(最小生成树之Kruskal)
题目链接: 传送门 find the most comfortable road Time Limit: 1000MS Memory Limit: 32768 K Description XX ...
- HDU 1598 find the most comfortable road (MST)
find the most comfortable road Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d ...
- hdu 1598 find the most comfortable road(并查集+枚举)
find the most comfortable road Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- HDU - 1598 find the most comfortable road 【最小生成树】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1598 思路 用kruskal 算法 将边排序后 跑 kruskal 然后依次将最小边删除 再去跑 kr ...
- HDU 1598 find the most comfortable road (罗列+Kruskal) 并检查集合
Problem Description XX星有很多城市,城市之间通过一种奇怪的快速公路SARS(Super Air Roam Structure---超级空中漫游结构)进行交流.每条SARS都对行驶 ...
- HDU 1598 find the most comfortable road(枚举+并查集,类似于最小生成树)
一开始想到用BFS,写了之后,发现有点不太行.网上查了一下别人的解法. 首先将边从小到大排序,然后从最小边开始枚举,每次取比它大的边,直到start.end属于同一个集合,即可以连通时停止.过程类似于 ...
随机推荐
- Js图片滚动
参考博文:http://blog.chinaunix.net/uid-12304670-id-2947067.html <%@ Page Title="" Language= ...
- PeopleSoft Related Language Records
As we all know, PeopleSoft is capable of maintaining application data in multiple languages within t ...
- MongoDB数据库的主从配对与迁移示例
数据中心在运行中有可能遇到各种硬件.电力.网络故障等问题,需要设计良好的系统来隔离,尽量减少对上层应用的影响,持续对外提供服务:一旦发生业务中断,也应尽快恢复.通过主从备份设计,在主应用系统发生故障时 ...
- php文件上传的例子
1.上传表单 upload.html 程序代码 [html] view plaincopy <form enctype="multipart/form-data" actio ...
- js 月历 时间函数 月份第一天 星期的判断
返回值为0-6,其中返回值0为星期天:如同,php中的日期函数一样判断.
- ERROR 1045 (28000): Access denied for user root@localhost (using password:
错误描述: Mysql中添加用户之后可能出现登录时提示ERROR 1045 (28000): Access denied for user的错误.删除user.user中值为NULL的,或更新NULL ...
- delphi中的ClientDataSet组件的open和Execute方法各自在什么情况下用?
ClientDataSet组件本来是给midas用的,也是所谓的borland的三层数据技术,使用这个控件必须发行midas.dll挺麻烦的 open是通过应用的SQL语句为SELECTexecute ...
- Oracle存储过程学习备忘
之前的项目使用存储过程很少,但在实际的项目中,存储过程的使用是必不可少的. 存储过程是一组为了完成特定功能的SQL 语句 集,经编译后存储在数据库中:存储过程创建后,一次编译在程序中可以多次调用,对安 ...
- C语言中内存对齐方式
一.什么是对齐,以及为什么要对齐: 1. 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问, ...
- 菜鸟学习Spring——第一个例子
一.概述 原来我们利用工厂来实现灵活的配置.现在利用Spring以后把这个交给了IoC容器管理.我们只要在XML文件上配上就可以了这样的话就节省了很多开发时间我们不需要知道后面的有多少只要动态的配上类 ...