find the most comfortable road

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 3686    Accepted Submission(s): 1565
Problem Description
XX星有很多城市,城市之间通过一种奇怪的快速公路SARS(Super Air Roam Structure---超级空中漫游结构)进行交流,每条SARS都对行驶在上面的Flycar限制了固定的Speed,同一时候XX星人对 Flycar的“舒适度”有特殊要求。即乘坐过程中最快速度与最低速度的差越小乘坐越舒服 ,(理解为SARS的限速要求。flycar必须瞬间提速/降速,痛苦呀 ),

但XX星人对时间却没那么多要求。要你找出一条城市间的最舒适的路径。(SARS是双向的)。

 
Input
输入包含多个測试实例。每一个实例包含:

第一行有2个正整数n (1<n<=200)和m (m<=1000),表示有N个城市和M条SARS。

接下来的行是三个正整数StartCity,EndCity,speed,表示从表面上看StartCity到EndCity,限速为speedSARS。speed<=1000000

然后是一个正整数Q(Q<11),表示寻路的个数。

接下来Q行每行有2个正整数Start,End, 表示寻路的起终点。

 
Output
每一个寻路要求打印一行。仅输出一个非负整数表示最佳路线的舒适度最快速与最低速的差。假设起点和终点不能到达,那么输出-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

题意:求联通路中的最小速度差。

题解:先按边权从小到大排序,再用并查集枚举。

2014-11-2 22:38:14更新

/*
** 用并查集每次选择一些权值最接近的边组合使得源点跟终点联通
*/
#include <stdio.h>
#include <string.h>
#include <algorithm> #define maxn 210
#define maxm 1010
#define inf 0x3f3f3f3f int pre[maxn], id;
struct Node {
int u, v, w;
} E[maxm]; int min(int a, int b) {
return a < b ? a : b;
} bool cmp(Node a, Node b) {
return a.w > b.w;
} int ufind(int k) {
int a = k, b;
while(pre[k]) k = pre[k];
while(a != k) {
b = pre[a];
pre[a] = k;
a = b;
}
return k;
} bool same(int a, int b) {
return ufind(a) == ufind(b);
} void unite(int a, int b) {
a = ufind(a);
b = ufind(b);
if(a != b) pre[a] = b;
} void addEdge(int u, int v, int w) {
E[id].u = u;
E[id].v = v;
E[id++].w = w;
} int main() {
int n, m, i, a, b, c, j, q, ans;
while(scanf("%d%d", &n, &m) == 2) {
for(i = id = 0; i < m; ++i) {
scanf("%d%d%d", &a, &b, &c);
addEdge(a, b, c);
}
std::sort(E, E + m, cmp);
scanf("%d", &q);
while(q--) {
scanf("%d%d", &a, &b);
ans = inf;
for(i = 0; i < m; ++i) {
memset(pre, 0, sizeof(int) * (n + 1));
for(j = i; j < m; ++j) {
unite(E[j].u, E[j].v);
if(same(a, b)) {
ans = min(ans, E[i].w - E[j].w);
break;
}
}
if(ans == inf) break; // cut
}
if(ans == inf) ans = -1;
printf("%d\n", ans);
}
}
return 0;
}

#include <stdio.h>
#include <string.h>
#include <limits.h>
#include <algorithm>
#define maxn 202
#define maxm 1002
using std::sort;
using std::min; int pre[maxn];
struct Node{
int u, v, cost;
} E[maxm]; int ufind(int k)
{
int a = k, b;
while(pre[k] != -1) k = pre[k];
while(a != k){
b = pre[a];
pre[a] = k;
a = b;
}
return k;
} bool cmp(Node a, Node b){
return a.cost < b.cost;
} int main()
{
int n, m, q, a, b, i, j, x, y, ans;
while(scanf("%d%d", &n, &m) == 2){
for(i = 0; i < m; ++i)
scanf("%d%d%d", &E[i].u, &E[i].v, &E[i].cost);
sort(E, E + m, cmp);
scanf("%d", &q);
while(q--){
scanf("%d%d", &a, &b);
ans = INT_MAX;
for(i = 0; i < m; ++i){
memset(pre, -1, sizeof(pre));
for(j = i; j < m; ++j){
x = ufind(E[j].u);
y = ufind(E[j].v);
if(x != y) pre[x] = y;
if(ufind(a) == ufind(b)){
ans = min(ans, E[j].cost - E[i].cost);
break;
}
}
}
if(ans == INT_MAX) printf("-1\n");
else printf("%d\n", ans); }
}
return 0;
}

HDU1598 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 并查集+贪心

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

  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. 最舒适的路(并查集+枚举)(hdu1598)

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

  5. hdu1598 find the most comfortable road (枚举)+【并查集】

    <题目链接> 题目大意: XX星有许多城市,城市之间通过一种奇怪的高速公路SARS(Super Air Roam Structure---超级空中漫游结构)进行交流,每条SARS都对行驶在 ...

  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

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

  8. [HDU1598]find the most comfortable road

    思路: 考虑一个暴力:枚举最大的边权和最小的边权,然后将边权在这之间的边全拿出来构成一张无向图,剩下的就是判断是否存在一条从$S$到$T$的路径.相当于判$S$和$T$是否连通,用并查集连一下即可.时 ...

  9. hdu-5861 Road(并查集)

    题目链接: Road Time Limit: 12000/6000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others) Pro ...

随机推荐

  1. 玩转 HTML5 下 WebGL 的 3D 模型交并补

    建设性的立体几何具有许多实际用途,它用于需要简单几何对象的情况下,或者数学精度很重要的地方,几乎所有的工程 CAD 软件包都使用 CSG(可以用于表示刀具切削,以及零件必须配合在一起的特征).CSG ...

  2. ldap数据库--ODSEE--schema

    ldap服务器包含上百个对象类型(object class)和属性,这些对象类和属性都可以满足大部分需求,如果你想定义自己的schema,你只能继承扩展现有的schema进行操作. tip: 增加的新 ...

  3. js判断对象为空 JSON.stringify(obj)

    JSON.stringify(obj) : 用于从一个对象解析出字符串 var c = {}; if(JSON.stringify(obj) == "{}"){ console.l ...

  4. C#算法面试题

    1.产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复. static void GetArray() { ]; ]; ; i < ; i++) { intArr[i] ...

  5. Java _分页Jdbc 版

    人生得意须尽欢,莫使金樽空对月. 先天下之忧而忧,后天下之乐而乐. 大东北的天气已经渐入佳境了,在夜深人静的时候,随着鼠标的移动,键盘清脆的声音,开启了今天的睡前代码工程!今天聊聊JDBC版本的分页, ...

  6. salesforce零基础学习(八十三)analytics:reportChart实现Dashboard(仪表盘)功能效果

    项目中经常会用到Report以及Dashboard来分析汇总数据,Dashboard可以指定view as user,如果针对不同的用户需要显示其允许查看的数据,比如  根据role hierarch ...

  7. MyBatis学习笔记1--初识MyBatis

    我也是初学者,写博客只是想把自己的整个思路整理一下,有不对或者不好的地方,请大家多多指正. 1.MyBatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射. ...

  8. 掌握numpy(四)

    数组的累加(拼接) 在前面讲了使用切片方法能够对数组进行切分,使用copy对切片的数组进行复制,那么数组该如何拼接呢? a1 = np.full((2,3),1)#填充数组 a2 = np.full( ...

  9. 如何从零开始对接第三方登录(Java版):QQ登录和微博登录

    前言 个人网站最近增加了评论功能,为了方便用户不用注册就可以评论,对接了QQ和微博这2大常用软件的一键登录,总的来说其实都挺简单的,可能会有一点小坑,但不算多,完整记录下来方便后来人快速对接. 后台设 ...

  10. Science发表的超赞聚类算法

    作者(Alex Rodriguez, Alessandro Laio)提出了一种很简洁优美的聚类算法, 可以识别各种形状的类簇, 并且其超参数很容易确定. 算法思想 该算法的假设是类簇的中心由一些局部 ...