nyoj 711最舒适的路线(第六届河南省程序设计大赛 并查集)
来源:互联网 发布:qt编程软件百度云 编辑:程序博客网 时间:2024/04/30 22:37
最舒适的路线
时间限制:5000 ms | 内存限制:65535 KB
难度:5
- 描述
异形卵潜伏在某区域的一个神经网络中。其网络共有N个神经元(编号为1,2,3,…,N),这些神经元由M条通道连接着。两个神经元之间可能有多条通道。异形卵可以在这些通道上来回游动,但在神经网络中任一条通道的游动速度必须是一定的。当然异形卵不希望从一条通道游动到另一条通道速度变化太大,否则它会很不舒服。
现在异形卵聚居在神经元S点,想游动到神经元T点。它希望选择一条游动过程中通道最大速度与最小速度比尽可能小的路线,也就是所谓最舒适的路线。
- 输入
- 第一行: K 表示有多少组测试数据。
接下来对每组测试数据:
第1行: N M
第2~M+1行: Xi Yi Vi (i=1,…..,M)
表示神经元Xi 到神经元Yi之间通道的速度必须是Vi
最后一行: S T ( S T )
【约束条件】
2≤K≤5 1<N≤500 0<M≤5000 1≤ Xi, Yi , S , T ≤N 0< Vi <30000,
Vi是整数。数据之间有一个空格。 - 输出
- 对于每组测试数据,输出一行:如果神经元S到神经元T没有路线,输出“IMPOSSIBLE”。否则输出一个数,表示最小的速度比。如果需要,输出一个既约分数。
- 样例输入
23 21 2 22 3 41 33 31 2 101 2 52 3 81 3
- 样例输出
2
5/4
- 来源
- 第六届河南省程序设计大赛
- 上传者
- ACM_赵铭浩
刚开始看这道题 想着用深搜吧 因为看到时间5000ms 结果发现越来越写不下去
因为这道题有重边啊 而且重边还不能去掉 都要考虑 唉 我的想法至此打住
确确实实发现自己总喜欢深搜了。。。唉 时间是个硬伤啊
苦思冥想 想到了度娘 哈哈
题解:
首先对速度排序 在这里从大到小。使用并查集,然后从下标0开始遍历,直到s 和t在一个集合里面
这个时候再判断最大速度和最小速度比值和rate比较。我当初看的时候想了想为什么这样遍历的结果一定是正确的呢
仔细想了想 由于我们对速度排序了 我们当前判断的s和t在一个集合里面的所有边一定是最大速度/最小速度 最小的值
为什么呢?我们可以再做个假设,如果当前集合最小速度的边还有一个更小的速度 如果我们使用这个更小的速度 最大速度/最小速度<最大速度/更小速度 懂了吗?
ac代码:
#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;struct node{int a,b;int speed;}c[5005];int fa[505];bool cmp(node x,node y){return x.speed>y.speed;}void init(int n){for(int i=0;i<=n;i++)fa[i]=i;}int find(int x){if(fa[x]!=x) fa[x]=find(fa[x]);return fa[x];}int gcd(int a,int b){int r;while(b)r=a%b,a=b,b=r;return a;}int main(){int ncase;scanf("%d",&ncase);while(ncase--){int n,m;memset(&c,0,sizeof(&c));scanf("%d %d",&n,&m);for(int i=0;i<m;i++)scanf("%d %d %d",&c[i].a,&c[i].b,&c[i].speed);int s,t;scanf("%d %d",&s,&t);sort(c,c+m,cmp);float rate=0x3fffffff;int Max,Min;for(int i=0;i<m;i++){init(n);int j;bool ok=false;for(j=i;j<m;j++){int aa=find(c[j].a);int bb=find(c[j].b);if(aa!=bb){if(aa<bb)fa[aa]=bb;elsefa[bb]=aa;}if(find(fa[s])==find(fa[t])){ok=true;break;}}if(ok){float curRate=(float)c[i].speed/c[j].speed;if(curRate<rate){rate=curRate;Max=c[i].speed;Min=c[j].speed;}}}if(rate==0x3fffffff){printf("IMPOSSIBLE\n");}else {if(Max%Min==0)printf("%d\n",Max/Min);else{int x=gcd(Max,Min);printf("%d/%d\n",Max/x,Min/x);}}}return 0;}
2 0
- nyoj 711最舒适的路线(第六届河南省程序设计大赛 并查集)
- 第六届河南省赛 zzulioj 1483: 最舒适的路线 (并查集)好题 nyoj 711
- 第六届程序设计大赛 T3 最舒适的路线(并查集)
- 第六届河南省赛 最舒适的路线【并查集】
- nyoj711&&zznu1624 最舒适的路线(第六届河南省程序设计大赛 广搜)
- NYOJ 711 最舒适的路线(并查集)
- NYOJ 711 最舒适的路线(并查集+枚举,贪心+欧几里德算法)
- nyoj711最舒适的路线 (枚举 + 并查集 )
- NYOJ_711_最舒适的路线【并查集】
- 最舒适的路线 第六届
- nyoj 711 最舒适的路线
- nyoj 711 最舒适的路线
- nyoj-711最舒适的路线
- NYOJ 题目711 最舒适的路线
- NYOJ 711 最舒适的路线
- nyoj 711 最舒适的路线
- nyoj-最舒适的路线
- nyoj 716 River Crossing 第六届河南省程序设计大赛
- 生活太糙(笑
- esp8266应用笔记
- 人才流失很大程度取决于中层领导
- 在eclipse中如何设置字体的大小
- 第9周项目3:人数不定的工资类
- nyoj 711最舒适的路线(第六届河南省程序设计大赛 并查集)
- SQL细节
- 设计模式(五)工厂模式
- spring 技术内幕--IOC初始化之BeanDefinition的在IOC容器中的注册
- php编程中require和include多层嵌套导致文件找不到的错误
- C#编写的基于VLC的播放器
- ubuntu搭建go环境
- Oracle多表关联更新(update多表关联)
- ZOJ 3605-F - Find the Marble-DP