传送门

Description

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

Input

第一行包含两个正整数,N和M。
接下来的M行每行包含三个正整数:x,y和v(1≤x,y≤N,0 最后一行包含两个正整数s,t,表示想知道从景点s到景点t最大最小速度比最小的路径。s和t不可能相同。

Output

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

Sample Input

样例14 21 2 13 4 21 4

样例23 31 2 101 2 52 3 81 3

样例33 21 2 22 3 41 3

Sample Output

样例1IMPOSSIBLE

样例25/4

样例32

Hint

N(1<N≤500)   M(0<M≤5000) Vi在int范围内

思路

  最小生成树Kruskal的思路,按速度从小到大排序后,从速度最小的公路开始进行枚举,把每条路的两端放到同一个集合,判断此时起点是否能到达终点,更新最小值。另一道类似题:点我

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 5005;
const int INF = 0x3f3f3f3f;
int N,M,rk[maxn],father[maxn];

struct Edge{
	int u,v,w;
}edge[maxn];

bool cmp(struct Edge x,struct Edge y)
{
	return x.w < y.w;
}

void init()
{
	memset(rk,0,sizeof(rk));
	memset(father,0,sizeof(father));
	for (int i = 0;i <= N;i++)
	{
		father[i] = i;
	}
}

int find(int x)
{
	int r = x;
	while (r != father[r])
	{
		r = father[r];
	}
	int i = x,j;
	while (i != r)
	{
		j = father[i];
		father[i] = r;
		i = j;
	}
	return r;
}

void unite(int x,int y)
{
	x = find(x);
	y = find(y);
	if (x != y)
	{
		if (rk[x] < rk[y])
		{
			father[x] = y;
		}
		else
		{
			father[y] = x;
			if (rk[x] == rk[y])
			{
				rk[x]++;
			}
		}
	}
}

int gcd(int a,int b)
{
	return b?gcd(b,a%b):a;
}

int main()
{
	while (~scanf("%d%d",&N,&M))
	{
		int s,t,fz,fm;
		double res = INF;
		for (int i = 0;i < M;i++)
		{
			scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].w);
		}
		scanf("%d%d",&s,&t);
		sort(edge,edge + M,cmp);
		for (int i = 0;i < M;i++)
		{
			init();
			for (int j = i;j < M;j++)
			{
				unite(edge[j].u,edge[j].v);
				if (find(s) == find(t))
				{
					double tmp = 1.0*edge[j].w/edge[i].w;
					if (tmp < res)
					{
						res = tmp;
						fz = edge[j].w;
						fm = edge[i].w;
					}
				}
			}
		}
		int com = gcd(fz,fm);
		res == INF?printf("IMPOSSIBLE\n"):fm/com == 1?printf("%d\n",fz/com):printf("%d/%d\n",fz/com,fm/com);
	}
	return 0;
}

codevs 1001 舒适的路线(Kruskal)的更多相关文章

  1. 求最大边/最小边的比值最小的路径 codevs 1001 舒适的路线

    codevs 1001 舒适的路线 2006年  时间限制: 2 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description Z小镇是一个景色宜人 ...

  2. Codevs 1001 舒适的路线 2006年 NOIP全国联赛提高组

    1001 舒适的路线 2006年 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Z小镇是一个景色宜人的地方,吸引来自各地的观 ...

  3. codevs 1001 舒适的线路 kruskal/gcd

    舒适的线路 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://www.codevs.cn/problem/1001/ Description Z小 ...

  4. codevs 1001 舒适的路线 (并查集)

    题目描述 Description Z小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光. Z小镇附近共有 N(<N≤)个景点(编号为1,,,…,N),这些景点被M(<M≤)条道路连 ...

  5. CODEVS 1001 舒适的路线

    思路:先按照速度大小对边排序,再枚举最终路径中的速度最大值,并查集,更新答案 #include<iostream> #include<vector> #include<a ...

  6. bzoj 1050: [HAOI2006]旅行comf(codevs.cn 1001 舒适的路线) 快排+并查集乱搞

    没用的话:好像很久没发博客了,主要是懒太蒟找不到水题.我绝对没弃坑...^_^ 还用些话:本文为博主原创文章,若转载请注明原网址和作者. 进入正题: 先pa网址: bzoj :http://www.l ...

  7. AC日记——舒适的路线 codevs 1001 (并查集+乱搞)

    1001 舒适的路线 2006年  时间限制: 2 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description Z小镇是 ...

  8. 舒适的路线(codevs 1001)

    题目描述 Description Z小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光.Z小镇附近共有N(1<N≤500)个景点(编号为1,2,3,…,N),这些景点被M(0<M≤ ...

  9. 【Kruskal】舒适的路线

    [codevs1001]舒适的路线 题目描述 Description Z小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光.Z小镇附近共有N(1<N≤500)个景点(编号为1,2,3,… ...

随机推荐

  1. 谈谈patch strategy

    所谓的patch strategy,就是软件发布后出现bug时打补丁的方式 - 主要是关于源代码branch如何组织的方式 针对项目的开发阶段.开发状态.维护方式不同,可以有不同的patching s ...

  2. .Net下一个类型转换神器

    引言 类型转换经常遇到,最常用的应该是string类型转换为其它基元类型,常见于http参数类型转换.Convert静态类的Convert.ChangeType()方法可以把实现IConvertibl ...

  3. winform程序自动升级

    可参考下面这个链接,描述挺详细的,下次用的时候试试,感谢牛逼的作者. http://www.fishlee.net/soft/simple_autoupdater/

  4. mysql full text全文索引必要条件

    show variables like 'ft_m%' 'ft_max_word_len', '84''ft_min_word_len', '4' 对于英文来说, ft_min_word_len=4是 ...

  5. VS2013 未找到与約束ContractName

    vs2013打开项目无法加载项目,关闭时提示  未找到与約束ContractName... 解決方法,打開控制面板,找到下面這個程序 右击,选 择 修 复

  6. window 运行指令(1)

    添加或删除程序 appwiz.cpl 管理工具 control admintools Bluetooth文件传送向导 fsquirt 计算器 calc 证书管理控制台 certmgr.msc 字符映射 ...

  7. operating expense & captial expenditure

    营运成本(营业成本, operating expense, OPEX) 指的是运行企业的持续性.消耗性的支出,与之对照的是资本支出(captial expenditure, CAPEX).例如:购买影 ...

  8. 东大oj-1511: Caoshen like math

    Worfzyq likes Permutation problems.Caoshen and Mengjuju are expert at these problems . They have n c ...

  9. 【CSS】 background

    background: #22b4ff //背景色 url("http://images.cnblogs.com/cnblogs_com/oiliu/529256/o_titleIMG.jp ...

  10. mysql性能优化-慢查询分析、优化索引和配置

    一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 profiling分析查询 2索引及查询优化 三.配置优化 1)      max_connec ...