传送门 :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. redmine的邮件配置

    redmine的邮件配置 2012-01-04 18:09:21|  分类: 默认分类|举报|字号 订阅     redmine里要用到邮件通知,本来以为很是简单,网上也有许多教程,谁知忙活了一下午, ...

  2. DDD 应对具体业务场景,Domain Model 重新设计

    DDD 应对具体业务场景,Domain Model 重新设计 写在前面 上联:no zuo no die why you try 下联:no try no high give me five 横批: ...

  3. 【转载】matlab如何判断一个点是否在多面体内

    转载自:http://www.52souji.net/point-within-a-polyhedron/ 我遇到的一个实际问题是:要在空位区域随机放置一定数量的原子,这些原子在空位区域任何一处存在的 ...

  4. C#函数式程序设计之泛型(下)

    C#函数式程序设计之泛型(下)   每当使用泛型类型时,可以通过where字句对泛型添加约束: + 这个例子直观地声明了一个约束:类型T必须与ListItem<string>相匹配.泛型类 ...

  5. springmvc3.1.1+hibernate4

    上篇介绍了基本的配置,这篇着重介绍与hibernate4整合. 1.web.xml文件中加入spring-hibernate的配置.新的web.xml文件内容如下: <?xml version= ...

  6. c++class 内存布局

    #include <iostream> using namespace std; class base1 { int a; double b; char c; }; int main() ...

  7. [转]Metasploit的meterpreter黑客脚本列表

    原文地址: 摘要: Metasploit的框架是一个令人难以置信的黑客攻击和渗透测试工具,每一个黑客称职的应该是熟悉和有能力的. 在上一篇文章中,我提供了你的 meterpreter 命令列表.这些命 ...

  8. 企业架构研究总结(41)——企业架构与建模之ArchiMate的由来和详述(上)

    终于完成了关于企业架构框架理论的总结,谢谢各位看官的支持,能挺过之前过于理论化的叙述而坚持到现在着实不易,笔者也自愧没有实践经验可以分享,希望日后有兴趣的看官能够不吝赐教.在本系列后面的也是最后一个大 ...

  9. Effective Java:Ch4_Class:Item14_在public类中应该使用访问方法而不是public域

    你可能偶尔需要编写退化类,目的只是为了集中实例域: // Degenerate classes like this should not be public! class Point { public ...

  10. fancybox关闭弹出窗口parent.$.fancybox.close();

    fancybox弹出窗口右上角会自带一个关闭窗口,并且点击遮罩层也会关闭fancybox 有时我们不需要这样进行关闭,隐藏关闭窗口,并且遮罩层不可点击 在弹出窗口页面加一链接进行关闭使用parent. ...