传送门 :code[vs]  1001

思路:拿到这题的首先的思路 , 就是跑一遍最短路。

可是在尝试了一会后发现不会写,于是果断弃

尝试另外的算法。。

于是就有的以下的算法。并查集 + 乱搞(有点像最小生成树) + 贪心

总的来说, 就是先对边排一遍序, 从最小边开始找

若找到一条边未访问过(即在不同的集合),则将他们合并, 如果他们的最大速度 除以 最小速度 比已有答案小,则更新答案

如此重复。。

最后找 最大速度和最小速度的最大公约数来化简。。

ok

#include <iostream>
#include <cstdio>
#include <algorithm>
#define Max 10005
#define INF 1e7
using namespace std;
char word;
int N, M;
int father [Max], Count;
int Answer_Max = INF, Answer_Min, Maxn, Minn;
struct node
{
int from;
int to;
int dis;
}Edge [Max];
inline void AddEdge(int from, int to, int dis)
{
Count++;
Edge [Count].from = from;
Edge [Count].to = to;
Edge [Count].dis = dis;
}
bool comp (const node a, const node b)
{
return a.dis < b.dis;
}
int find (int x) // 找祖先
{
if (father [x] == x)
return x;
else return father [x] = find (father [x]);
}
inline void read (int &now)
{
now = ;
word = getchar ();
while (word < '' || word > '')
word = getchar ();
while (word >= '' && word <= '')
{
now = now * + (int)(word - '');
word = getchar ();
}
}
int Gcd (int x, int y) //找最大公约数
{
return y == ? x : Gcd (y, x % y);
}
int main()
{
read (N);
read (M);
int x, y, v;
for (int i = ; i <= M; i++)
{
read (x);
read (y);
read (v);
AddEdge (x, y, v);
}
sort (Edge + , Edge + + M, comp); // 把边排序,从最小的边开始找
int start, end;
read (start);
read (end);
for (int k = ; k <= M; k++)
{ for (int i = ; i <= N; i++) // 把每个点的 祖先初始化为本身
father [i] = i;
Minn = Edge [k].dis; // 初始化最大值 最小值为 当前扫描边的速度
Maxn = Edge [k].dis;
for (int i = k; i <= M; i++)
{
int x = find (Edge [i].from); // 找当前边的 两个点的祖先
int y = find (Edge [i].to);
if (x != y) //判断两点是否不在同一集合中 , 如果不在,将这两个点合并 , 证明此边都 已访问
{
father [x] = y;
Maxn = max (Maxn, Edge [i].dis ); // 最大值为 之前的最大值 与当前边的值取大
}
if (find (start) == find (end)) // 如果起点与终点都在同一集合 , 说明图已经扫描完
break;
}
if (find (start) == find (end)) // 如果图已经扫描完, 且 当前的要求的值比上一次的小, 则更新答案
if (double (Maxn) / double (Minn) < double (Answer_Max) / double (Answer_Min))
{
Answer_Max = Maxn;
Answer_Min = Minn;
}
}
if (Answer_Min == ) // 如果 答案未更新,则证明无解
cout << "IMPOSSIBLE";
else
{
int now = Gcd (Answer_Max, Answer_Min); // 因为结果要化为既约分数(即化到最简) 所以找出最大速度与最小速度的最大公约数
Answer_Max /= now; // 化简
Answer_Min /= now;
if (Answer_Min == ) //如果化简后最小的速度为0 ,则证明 最大与最小可以整除
cout << Answer_Max << endl;
else
cout << Answer_Max << "/" << Answer_Min << endl;
}
return ;
}

舒适的路线 (code[vs] 1001)的更多相关文章

  1. 舒适的路线(codevs 1001)

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

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

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

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

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

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

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

  5. codevs 1001 舒适的路线(Kruskal)

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

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

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

  7. [题解]codevs1001 舒适的路线

    h3 { font-family: Consolas; color: #339966 } .math { font-family: Consolas; color: gray } 题目描述 Descr ...

  8. codevs1001 舒适的路线 - 贪心 - 并查集

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

  9. [codevs1001]舒适的路线

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

随机推荐

  1. 【转】Android 系统菜单与自定义菜单

    Android 系统菜单与自定义菜单实现方法如下:系统菜单显示DefaultMenu.java package com.wxz.menu; import com.wxz.menu.R; import  ...

  2. android的版本控制

    在一个团队项目中,项目的版本控制,一方面促进团队的协同能力,另一方面提高项目的进度 即使一个人的项目也最好使用SVN这样的版本控制,可以清楚的知道自己的修改的代码,和项目进度等.合理的托管,也让优秀的 ...

  3. 经典的SQL语句面试题

    Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 问题 ...

  4. ACE模板之Jqgrid

    Asp.Net MVC中使用ACE模板之Jqgrid   第一次看到ACE模板,有种感动,有种相见恨晚的感觉,于是迅速来研究.它本身是基于bootstrap和jqueryui,但更nice,整合之后为 ...

  5. Toad for Oracle的安装

    分享一下Oracle 10gToad for Oracle的安装步骤   三年前用过Oracle,单纯的“用过”,主要就是说对数据库的一些操作,还不包含创建一些存储过程之类的,所以对Oracle仅仅只 ...

  6. LinQ动态排序

    LinQ动态排序 首先修复程序中的一个BUG这个BUG在GridPager类中,把sord修改为sort这个名称填写错误,会导致后台一直无法获取datagrid的排序字段 本来是没有这一讲的,为了使2 ...

  7. Best Cow Line(POJ No.3617)

    问题: 链接:http://poj.org/problem?id=3617 思路: 按照字典序比较S和将S反转后的字符串S' 如果S较小,就从S的开头取出一个字符,加到T的末尾(更新下标值) 如果S’ ...

  8. 迟到的 WPF 学习 —— 依赖项属性

    本章学习依赖项属性,英文原文 Dependency Property,它是传统 .Net Framework 属性的扩展,是 WPF 的专属,但所幸使用起来和传统属性几乎一样.WPF 元素所提供的大多 ...

  9. ASP.NET MVC中使用Ninject

    ASP.NET MVC中使用Ninject 在[ASP.NET MVC 小牛之路]系列上一篇文章(依赖注入(DI)和Ninject)的末尾提到了在ASP.NET MVC中使用Ninject要做的两件事 ...

  10. XML中的五个保留字符及实体引用

    字符名称 字符 实体引用 和 & & 大于号 >  > 小于号 <  < 单引号 ‘ &apos; 双引号 “ " 在XML文档中,构成元素内 ...