题目描述

Z小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光。Z小镇附近共有N个景点(编号为1,2,3,…,N),这些景点被M条道路连接着,所有道路都是双向的,两个景点之间可能有多条道路。也许是为了保护该地的旅游资源,Z小镇有个奇怪的规定,就是对于一条给定的公路Ri,任何在该公路上行驶的车辆速度必须为Vi。速度变化太快使得游客们很不舒服,因此从一个景点前往另一个景点的时候,大家都希望选择行使过程中最大速度和最小速度的比尽可能小的路线,也就是所谓最舒适的路线。

输入输出格式

输入格式:

第一行包含两个正整数,N和M。

接下来的M行每行包含三个正整数:x,y和v。表示景点x到景点y之间有一条双向公路,车辆必须以速度v在该公路上行驶。

最后一行包含两个正整数s,t,表示想知道从景点s到景点t最大最小速度比最小的路径。s和t不可能相同。

输出格式:

如果景点s到景点t没有路径,输出“IMPOSSIBLE”。否则输出一个数,表示最小的速度比。如果需要,输出一个既约分数。

输入输出样例

输入样例#1: 复制

4 2
1 2 1
3 4 2
1 4
输出样例#1: 复制

IMPOSSIBLE
输入样例#2: 复制

3 3
1 2 10
1 2 5
2 3 8
1 3
输出样例#2: 复制

5/4
输入样例#3: 复制

3 2
1 2 2
2 3 4
1 3
输出样例#3: 复制

2

要求所经过的路程的最大权值尽可能小   最小权值尽可能大  使得 最大权值/最小权值  最小        
可以先将所有边从小到大排序好
然后枚举最小权值i 然后j从i开始往m遍历 (当遍历过程中正好联通时立刻退出 (贪心原理) ) 犯了一个巨大错误:如果不是全局变量一定要初始化 我因为没有初始化然后wa的点每次都不一样!!!!!
还有就是注意细节
排序的思想很好
#include<bits/stdc++.h>
using namespace std;
//input by bxd
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define repp(i,a,b) for(int i=(a);i>=(b);i--)
#define RI(n) scanf("%d",&(n))
#define RII(n,m) scanf("%d%d",&n,&m)
#define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define RS(s) scanf("%s",s);
#define LL long long
#define pb push_back
#define fi first
#define REP(i,N) for(int i=0;i<(N);i++)
#define CLR(A,v) memset(A,v,sizeof A)
///////////////////////////////////
#define inf 0x3f3f3f3f
#define N 6000+6
int f[N]; int gcd(int x,int y)
{
return y==?x:gcd(y,x%y);
} int find1(int x)
{
return x==f[x]?x:f[x]=find1(f[x]);
}
void union1(int a,int b)
{
int x=find1(a);
int y=find1(b);
if(x!=y)
f[x]=y;
} struct node
{
int s,e,len; }edge[N]; bool cmp(node a,node b)
{
return a.len<b.len;
} int main()
{
int n,m;
RII(n,m); rep(i,,m)
RIII(edge[i].s,edge[i].e,edge[i].len);
int s,e;
RII(s,e); int ans1=,ans2=;
sort(edge+,edge++m,cmp);
rep(i,,m)
{
rep(j,,n)
f[j]=j;
int j;
for(j=i;j<=m;j++)
{
if(find1(edge[j].s)==find1(edge[j].e))continue;
union1(edge[j].s,edge[j].e);
if(find1(s)==find1(e))break;
}
if(i==&&(find1(s)!=find1(e)) )
{
printf("IMPOSSIBLE");
return ;
}
if(find1(s)!=find1(e))break;
if(ans1*edge[i].len>=ans2*edge[j].len)
ans1=edge[j].len,ans2=edge[i].len;
}
int x=gcd(ans1,ans2);
if (x==ans2) printf("%d\n",ans1/ans2); else printf("%d/%d\n",ans1/x,ans2/x);
}

P2502 [HAOI2006]旅行 并查集的更多相关文章

  1. P2502 [HAOI2006]旅行——暴力和并查集的完美结合

    P2502 [HAOI2006]旅行 一定要看清题目数据范围再决定用什么算法,我只看着是一个蓝题就想到了记录最短路径+最小生成树,但是我被绕进去了: 看到只有5000的边,我们完全可以枚举最小边和最大 ...

  2. P2502 [HAOI2006]旅行

    P2502 [HAOI2006]旅行有些问题光靠直觉是不靠谱的,必须有简单的证明,要么就考虑到所有情况.这个题我想的是要么见最小生成树,要么建最大生成树,哎,我sb了一种很简单的情况就能卡掉在最小生成 ...

  3. 洛谷P2502[HAOI2006]旅行

    题目: Z小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光.Z小镇附近共有N个景点(编号为1,2,3,-,N),这些景点被M条道路连接着,所有道路都是双向的,两个景点之间可能有多条道路.也许 ...

  4. luogu题解P2502[HAOI2006]旅行--最小生成树变式

    题目链接 https://www.luogu.org/problemnew/show/P2502 分析 一个很\(naive\)的做法是从\(s\)到\(t\)双向BFS这当然会TLE 这时我就有个想 ...

  5. luogu P2502 [HAOI2006]旅行

    传送门 边数只有5000,可以考虑\(O(m^2)\)算法,即把所有边按边权升序排序,然后依次枚举每条边\(i\),从这条边开始依次加边,加到起点和终点在一个连通块为止.这个过程可以用并查集维护.那么 ...

  6. BZOJ 1050 旅行(并查集)

    很好的一道题.. 首先把边权排序.然后枚举最小的边,再依次添加不小于该边的边,直到s和t联通.用并查集维护即可. # include <cstdio> # include <cstr ...

  7. P2502 [HAOI2006]旅行 最小生成树

    思路:枚举边集,最小生成树 提交:1次 题解:枚举最长边,添加较小边. #include<cstdio> #include<iostream> #include<algo ...

  8. BZOJ 1050: [HAOI2006]旅行comf( 并查集 )

    将edge按权值排序 , O( m² ) 枚举边 , 利用并查集维护连通信息. ------------------------------------------------------------ ...

  9. BZOJ 1050: [HAOI2006]旅行comf(枚举+并查集)

    [HAOI2006]旅行comf Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点 ...

随机推荐

  1. SQL——将表中的最大ID+1插入新的ID中------Insert into 表 MAX(表id) +1

    表结构:group表(groupid int,groupname varchar) 表中数据:id name 分组1 分组2 分组3 分组4 ----------------------------- ...

  2. luogu P1070 道路游戏

    传送门 这里设\(f_i\)表示时刻\(i\)的答案 转移的话在\([i-p+1,i-1]\)之间枚举j,然后考虑从哪个点走过来 复杂度为\(O(n^3)\) // luogu-judger-enab ...

  3. 第17月第7天 iOS 数组越界,防Crash处理

    1. 上面方法已经可以避免crash,为了避免冗余的代码,写一个NSArray的分类,利用runtime替换NSArray的对象方法objectAtIndex:,在这里进行判断,捕获异常: #impo ...

  4. mysql 架构~多写模式MGR

    一  简介:今天咱们来聊聊MGR的单主切换和新节点加入二 单主模式下变成多主:  1 3306  STOP group_replication;  set global group_replicati ...

  5. 2017-2018-2 20155303『网络对抗技术』Exp9:Web安全基础

    2017-2018-2 『网络对抗技术』Exp9:Web安全基础 --------CONTENTS-------- 一.基础问题回答 1.SQL注入攻击原理,如何防御? 2.XSS攻击的原理,如何防御 ...

  6. Shiro缓存(十三)

    使用缓存,可以解决每次访问请求都查数据库的问题.第一次授权后存入缓存. 缓存流程 shiro中提供了对认证信息和授权信息的缓存.shiro默认是关闭认证信息缓存的,对于授权信息的缓存shiro默认开启 ...

  7. 在imagenet预训模型上进行finetune

    所谓fine tune就是用别人训练好的模型,加上我们自己的数据,来训练新的模型.fine tune相当于使用别人的模型的前几层,来提取浅层特征,然后在最后再落入我们自己的分类中. fine tune ...

  8. camera驱动框架分析(上)【转】

    转自:https://www.cnblogs.com/rongpmcu/p/7662738.html 前言 camera驱动框架涉及到的知识点比较多,特别是camera本身的接口就有很多,有些是直接连 ...

  9. Linux 获取设备树源文件(DTS)里描述的资源【转】

    转自:http://www.linuxidc.com/Linux/2013-07/86839.htm 转自:http://blog.sina.com.cn/s/blog_636a55070101mce ...

  10. mysql系列六、mysql创建用户、授权、备份及恢复命令

    一.创建用户和授权 下面的操作中,其中someusername为用户名,somepassword为密码,somedbname为数据库名 1.创建用户 create user 'someusername ...