题目链接:

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 并查集+贪心的更多相关文章

  1. hdu 1598 find the most comfortable road (并查集+枚举)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1598 find the most comfortable road Time Limit: 1000/ ...

  2. hdu 1598 find the most comfortable road (并查集)

    find the most comfortable road Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  3. hdu 1598 find the most comfortable road(枚举+卡鲁斯卡尔最小生成树)

    find the most comfortable road Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  4. HDU 1598 find the most comfortable road(最小生成树之Kruskal)

    题目链接: 传送门 find the most comfortable road Time Limit: 1000MS     Memory Limit: 32768 K Description XX ...

  5. HDU 1598 find the most comfortable road (MST)

    find the most comfortable road Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d ...

  6. hdu 1598 find the most comfortable road(并查集+枚举)

    find the most comfortable road Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  7. HDU - 1598 find the most comfortable road 【最小生成树】

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1598 思路 用kruskal 算法 将边排序后 跑 kruskal 然后依次将最小边删除 再去跑 kr ...

  8. HDU 1598 find the most comfortable road (罗列+Kruskal) 并检查集合

    Problem Description XX星有很多城市,城市之间通过一种奇怪的快速公路SARS(Super Air Roam Structure---超级空中漫游结构)进行交流.每条SARS都对行驶 ...

  9. HDU 1598 find the most comfortable road(枚举+并查集,类似于最小生成树)

    一开始想到用BFS,写了之后,发现有点不太行.网上查了一下别人的解法. 首先将边从小到大排序,然后从最小边开始枚举,每次取比它大的边,直到start.end属于同一个集合,即可以连通时停止.过程类似于 ...

随机推荐

  1. WAMP环境下访问PHP提示下载PHP文件

    原因是服务器没有加载到PHP文件 到http.conf下加载 AddType application/x-httpd-php .php AddType application/x-httpd-php ...

  2. C#反射动态调用dll中的方法

    //加载程序集(dll文件地址),使用Assembly类 Assembly assembly = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirec ...

  3. Web调用ExE

    把这个文件导入注册表,那么我们在浏览器中输入PrintLabel://1022,那么就会自动调用C:\\Program Files\\xxx有限公司\\Sellercube Label Maker\\ ...

  4. javascript的变量,传值和传址,参数之间关系

    先把收获晾一下: 1.javascrip变量包含两种类型的值,一种为引用类型的值,一种是基本类型的值.引用类型包括:Array,Object,Function(可以这么理解,非基本类型的都是引用类型) ...

  5. mysql 语句其它及优化

    将检索到的数据保存到文件  Select * into outfile ‘文件地址’ from tabname; 生成的文件以制表符区分字段,以换行符区分记录 为满足特殊需求会采用不同的分割方式. 支 ...

  6. PHP生成二维码库phpqrcode

    Description PHP QR Code is open source (LGPL) library for generating QR Code, 2-dimensional barcode. ...

  7. MYSQL查询某字段中以逗号分隔的字符串的方法

    首先我们建立一张带有逗号分隔的字符串. CREATE TABLE test(id int(6) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id),pname VARCH ...

  8. 常用icon以及color颜色RGB值和对应颜色效果图

    Android谷歌官方扁平化设计常用icon集合   Android谷歌官方扁平化设计color颜色RGB值和对应颜色效果图.

  9. Ubuntu下部署java JDK和eclipse IDE

    安装Java编程开发环境: Ubuntu默认安装openjava,可以通过java -version查看是否安装.但我使用Ubuntu9.10升级到10.04LTS时,openjava没有了.另外,如 ...

  10. mybatis数据库基本配置包括数据源事物类型等

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC ...