HYSBZ - 1050(旅行comf Java实现)

原题地址

解法:枚举每一条边,对于这条边,我们需要找到集合中和其值相差最小的最大边,这个集合是指与包括i边在内的ST联通集。对于这一要求,我们只需对所有的边进行从小到大的排序,那么从i边开始,一条条地加入并查集,一旦形成上述的联通集,立刻停止。

import java.io.*;
import java.util.*;
public class Main{private static class edge{int x,y,v;}private static class cmp implements Comparator<edge>{@Overridepublic int compare(edge a,edge b){return a.v<b.v?-1:1;}}private static int fa[]=new int[505];private static int Find(int x){if(fa[x]==-1) return x;return fa[x]=Find(fa[x]);}private static int gcd(int a,int b){return b==0?a:gcd(b,a%b);}private static final int N=5000+5;private static edge e[]=new edge[N];public static void main(String[] args){int n,m,s,t;Scanner sc=new Scanner(new InputStreamReader(System.in));n=sc.nextInt();m=sc.nextInt();for(int i=0;i<m;i++){e[i]=new edge();e[i].x=sc.nextInt();e[i].y=sc.nextInt();e[i].v=sc.nextInt();}s=sc.nextInt();t=sc.nextInt();Arrays.sort(e,0,m,new cmp());int x1=0,y1=0;for(int i=0;i<m;i++){int ma=-1;Arrays.fill(fa,-1);for (int j=i; j<m; j++){int f1=Find(e[j].x),f2=Find(e[j].y);if (f1==f2) continue;fa[f1]=f2;if (Find(s)==Find(t)){ma=e[j].v;break;}}if (ma==-1&&i==0){System.out.printf("IMPOSSIBLE\n");System.exit(0);}if (ma==-1) break;if (x1==0||x1*e[i].v>ma*y1){x1=ma;y1=e[i].v;}}int x=gcd(x1,y1);if (x==y1) System.out.printf("%d\n",x1/y1);else System.out.printf("%d/%d\n",x1/x,y1/x);sc.close();}
}

转载于:https://www.cnblogs.com/zsyacm666666/p/6670458.html

HYSBZ - 1050(旅行comf 并查集Java实现)相关推荐

  1. BZOJ 1050 [HAOI2006]旅行comf(并查集)

    1050: [HAOI2006]旅行comf Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000). ...

  2. bzoj1050 [HAOI2006]旅行comf(并查集)

    要求路径上最大边与最小边比值的最小值.我们知道,如果固定最小值,最大值越接近最小值,他们的比值越小.因此我们可以采用类似bzoj3454的方法,把所有边从小到大排序,枚举最小值,再枚举最大值,用并查集 ...

  3. 并查集--Java实现

    将展示三种不同的并查集实现,通过这样的演化过程来体会并查集的思想. 三种实现里,都用到了一个id数组,但是具体的含义略有不同. quick-find 这种实现里,id数组长度为N,如果p和q是相连的, ...

  4. BZOJ 1050 旅行comf

    题目如下: 题目描述 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求一条路径,使得路径上最大边 ...

  5. [并查集]BZOJ 1050——[HAOI2006]旅行comf

    1050: [HAOI2006]旅行comf 题目描述 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S ...

  6. BZOJ 1050: [HAOI2006]旅行comf(枚举+并查集)

    [HAOI2006]旅行comf Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点 ...

  7. bzoj 1050: [HAOI2006]旅行comf(codevs.cn 1001 舒适的路线) 快排+并查集乱搞

    没用的话:好像很久没发博客了,主要是懒太蒟找不到水题.我绝对没弃坑...^_^ 还用些话:本文为博主原创文章,若转载请注明原网址和作者. 进入正题: 先pa网址: bzoj :http://www.l ...

  8. bzoj 1050: [HAOI2006]旅行comf(并查集)

    算法:并查集 难度:NOIP 题解: 将所有边权从小到大排序,正序枚举最小边,在以第i条边为最短边的情况下,枚举j(权值比i大的边),用并查集维护全图的连通性,如果s,t已经连通,并且做到可以更新答案 ...

  9. BZOJ-1050-[HAOI2006]旅行comf(并查集)

    Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求 一条路径,使得路径上最 ...

最新文章

  1. C语言之prinf的用法
  2. 数据机房气流组织的常见类型及应用
  3. 计算机路表配置命令,计算机、华为交换机、路由器配置命令表
  4. Mysql 函数入门
  5. oracle select之后自动保存excel_Excel制作自动化仓库入库单,数据录入、计算、保存只需一键完成...
  6. 以图换字的几种方法及优劣分析
  7. Atitit 数据出入管理法v3 目录 1.1. 边界检查:web边界和sql边界 1 2. 检查条目 1 2.1. 数据种类检查 整数 小数 字符串(带长度,字符白名单校验) 1 2.2. 字符黑
  8. 7000字爆肝!我把14个自学编程的压箱底网站全部分享给你们啦
  9. wts文件生成engine文件的方法
  10. 根据设计稿,用JS计算rem的值
  11. 雷达通信术语中英文对照
  12. 电脑重装系统后无法上网怎么办
  13. STP——BPDU报文
  14. 机器人厨房、透视冰箱、可穿戴空气净化器…CES 2021还有哪些新奇特?
  15. node插件rimraf
  16. python使用you-get下载视频
  17. java:实现三重缓冲区(附完整源码)
  18. 蓝桥杯——单片机设计与开发初学者必备资料
  19. 手机扫一扫ocr识别技术
  20. 英文SEO移动端搜索优化指南

热门文章

  1. c++MMMMM:oo
  2. pycharm安装lxml
  3. BZOJ3555: [Ctsc2014]企鹅QQ
  4. 使用CodeFirst创建并更新数据库
  5. ERROR:Tried to register widget id ==basemapGalleryDiv but that id is already registered解决办法
  6. 避免将项目名称用作映射类型名称
  7. (转)剖析Delphi中的构造和析构
  8. 160-PHP 文本替换函数str_replace(一)
  9. 数据可视化实现技术(canvas/svg/webGL)
  10. PhpStudy 升级 MySQL 版本到5.7