codevs1001 舒适的路线
2016-11-04 15:08
218 查看
并查集
按边长从小到大排序
http://blog.csdn.net/zhuml123/article/details/51722485
很巧妙的想法
按边长从小到大排序
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; }
相关文章推荐
- 枚举+并查集 之 CODE[VS] 1001 舒适的路线 2006年
- codevs 1001 舒适的路线 解题报告 (枚举+并查集)
- codevs1001 舒适的路线
- 求最大边/最小边的比值最小的路径 codevs 1001 舒适的路线
- codevs 1001 舒适的路线
- codevs1001 舒适的路线 - 贪心 - 并查集
- codevs 1001 舒适的路线(并查集) 题解
- codevs 1001 舒适的路线 (并查集)
- CODE[VS] 1001 舒适的路线 (kruskal)
- BZOJ 1050 [HAOI2006]旅行comf CODEVS 1001 舒适的路线 并查集
- codevs 1001 舒适的路线
- CODE[VS] 1001 舒适的路线
- [Codevs] 1001 舒适的路线
- codevs1001 舒适的路线
- 【codevs1001】舒适的路线,心累的冰茶几
- 舒适的路线 (code[vs] 1001)
- codevs 1001 舒适的路线
- CODEVS 1001舒适的路线
- codevs 1001 舒适的路线
- bzoj 1050 codevs1001 舒适的路线[并查集]