codevs1001 舒适的路线
来源:互联网 发布:网络流行语解释大全 编辑:程序博客网 时间:2024/04/28 16:47
并查集
按边长从小到大排序
http://blog.csdn.net/zhuml123/article/details/51722485
很巧妙的想法
#include<stdio.h>#include<iostream>#include<algorithm>using namespace std;int n,m;int s,t;struct edd{ int x; int y; int z;}edge[5003];int cmp(edd a,edd b){ return a.z<b.z;}int fa[502];int find(int a){ if(fa[a]!=a){fa[a]=find(fa[a]);} return fa[a];}int unnion(int a,int b){ a=find(a); b=find(b); if(a!=b) fa[a]=b;}int gcd(int a,int b){ if(b==0) return a; return gcd(b,a%b);}int main(){ scanf("%d%d",&n,&m); int i,j; for(i=1;i<=m;i++) { scanf("%d%d%d",&edge[i].x,&edge[i].y,&edge[i].z); } scanf("%d%d",&s,&t); int l=0,r=0; int ansl=0,ansr=0,ttt=0; sort(edge+1,edge+m+1,cmp); while(1) { for(i=1;i<=n;i++) fa[i]=i; for(i=l+1;i<=m;i++) { unnion(edge[i].x,edge[i].y); if(find(s)==find(t)) { r=i; break; } } if(find(s)!=find(t)) break; for(i=1;i<=n;i++) fa[i]=i; for(i=r;i>=1;i--) { unnion(edge[i].x,edge[i].y); if(find(s)==find(t)) { l=i; break; } } if(ttt==0||edge[r].z*edge[ansl].z<=edge[l].z*edge[ansr].z) { ttt++; ansl=l; ansr=r; } } if(ansr==0&&ansl==0) printf("IMPOSSIBLE"); else if(edge[ansr].z%edge[ansl].z==0)printf("%d",edge[ansr].z/edge[ansl].z); else { int k=gcd(edge[ansr].z,edge[ansl].z); int x=edge[ansr].z/k; int y=edge[ansl].z/k; printf("%d/%d",x,y); } return 0;}
0 0
- codevs1001 舒适的路线
- codevs1001 舒适的路线
- 【codevs1001】舒适的路线,心累的冰茶几
- bzoj 1050 codevs1001 舒适的路线[并查集]
- codevs1001 舒适的路线 贪心枚举+并查集
- 【Codevs1001】舒适的路线 并查集 枚举 比值 (7/1000)
- codevs1001 舒适的路(并查集+枚举)
- 舒适的路线
- 最舒适的路线
- wikioi1001 舒适的路线
- 1001 舒适的路线
- 舒适的路线
- wikioi 1001 舒适的路线
- nyoj-最舒适的路线
- wikioi 1001 舒适的路线
- 舒适的路线 2006年
- Codevs 1001 舒适的路线
- codevs 1001 舒适的路线
- JMeter关联
- 利用外资处置不良资产障碍与策略
- Servlet生成随机验证码
- IDAPython: importing "site" failed.
- Android Studio git 冲突合并注意点
- codevs1001 舒适的路线
- 记CXF中的一次Non-Heap内存泄露
- Oracle group by 基本及的拓展 ROLLUP, CUBE, GROUPING 功能and GROUPING 集合
- C进阶指南(2):数组和指针、打桩(转)
- 使用Intent 利用bundle传递对象
- 新手入门JAVA学习(下册)
- 【长文干货】浅析分布式系统
- 修改notepad++的主题(背景色、前景色、字体等)
- 关于Recyclerview的NO_POSITION问题解决方法