BZOJ 1050: [HAOI2006]旅行comf (并查集 或 单调队列)
这是建空间后做的第一道题啊= =好水
排序,枚举最小边,然后并查集求出联通时的最大边
或者排次序,从小到大插边,如果插边时最小的边拿掉不会使s与t不联通,就删去。
code:
#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>using namespace std;struct node{ int x,y,dist;}a[5010];int n,m,s,t,f[510],ansi,ansa;bool cmp(node x,node y){return x.dist<y.dist;}int find(int x){if (x!=f[x]) f[x]=find(f[x]);return (f[x]);}int gcd(int x,int y){ if (!y) return x; return gcd(y,x %y);}int main(){ scanf("%d%d",&n,&m); for (int i=1;i<=m;i++) scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].dist); sort(a+1,a+1+m,cmp); scanf("%d%d",&s,&t); ansi=a[1].dist;ansa=40000; for (int i=1;i<=n;i++) f[i]=i; for (int i=1;i<=m;i++) { int x=find(a[i].x),y=find(a[i].y); if (x!=y) f[x]=y; x=find(s);y=find(t); if (x==y) { ansa=a[i].dist; break; } } if (ansa==40000) {printf("IMPOSSIBLE\n");return 0;} for (int i=2;i<=m;i++) { for (int j=1;j<=n;j++) f[j]=j; for (int j=i;j<=m;j++) { int x=find(a[j].x),y=find(a[j].y); if (x!=y) f[x]=y; x=find(s);y=find(t); if (x==y) { if (ansa*1.0/ansi>a[j].dist*1.0/a[i].dist) {ansa=a[j].dist;ansi=a[i].dist;} break; } } } int t=gcd(ansa,ansi); if (ansa*1.0/ansi==ansa/ansi) printf("%d\n",ansa/ansi); else printf("%d/%d",ansa/t,ansi/t); return 0;} |
BZOJ 1050: [HAOI2006]旅行comf (并查集 或 单调队列)的更多相关文章
- BZOJ 1050: [HAOI2006]旅行comf( 并查集 )
将edge按权值排序 , O( m² ) 枚举边 , 利用并查集维护连通信息. ------------------------------------------------------------ ...
- BZOJ 1050 [HAOI2006]旅行comf
1050: [HAOI2006]旅行comf Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1889 Solved: 976[Submit][Sta ...
- 【BZOJ1050】[HAOI2006]旅行comf 并查集
[BZOJ1050][HAOI2006]旅行comf Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<300 ...
- bzoj 1050: [HAOI2006]旅行comf(codevs.cn 1001 舒适的路线) 快排+并查集乱搞
没用的话:好像很久没发博客了,主要是懒太蒟找不到水题.我绝对没弃坑...^_^ 还用些话:本文为博主原创文章,若转载请注明原网址和作者. 进入正题: 先pa网址: bzoj :http://www.l ...
- bzoj 1050 [HAOI2006]旅行comf (并查集)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1050 思路: 先将每条边的权值排个序优先小的,然后从小到大枚举每一条边,将其存到并查集 ...
- bzoj 1050: [HAOI2006]旅行comf【枚举+并查集】
m是5000,就想到了直接枚举比例 具体做法是是先把边按照边权从小到大排序,然后先枚举最小边权,再枚举最大边权,就是从最小边权里一个一个加进并查集里,每次查st是否联通,联通则退出,更新答案 #inc ...
- 1050. [HAOI2006]旅行【并查集+枚举】
Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求 一条路径,使得路径上最 ...
- bzoj 1050: [HAOI2006]旅行comf&&【codevs1001】
Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求 一条路径,使得路径上最 ...
- BZOJ1050 [HAOI2006]旅行comf[并查集判图连通性]
★ Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求 一条路径,使得路径 ...
随机推荐
- jstree使用小结(三)
操作节点的这几个事件都比较简单: 如下 var $tree=$('#tree1'); $tree.jstree({...}); //选中节点 $tree.on('select_node.jstree' ...
- C# Expression表达式笔记
整理了一下表达式树的一些东西,入门足够了 先从ConstantExpression 开始一步一步的来吧 它表示具有常量值的表达式 我们选建一个控制台应用程序 ConstantExpression _ ...
- HTML 表单元素之 input 元素
介绍HTML 5: 表单元素之 input 元素 表单元素之 input 元素 - text, password, url, telephone, email, search, file, radio ...
- Spring MVC之RequestMapping
第一部分.概述 /**映射URL到控制器类或处理程序*/@Target({ElementType.METHOD, ElementType.TYPE})@Retention(RetentionPolic ...
- TSP问题[动态规划]
分析: 有用的量:城市集合V={a,b,c,d,--} 所以我们用 T(i,V) 表示从 城市 i 出发遍历集合 V 中的城市一遍且仅一遍后回到 i 所用的最少费用(这里可能表达不好,底下会看到,但是 ...
- java的WindowBuilder可视化插件
一直做在安卓用xml作界面,对于java的控件不熟悉,也不习惯用代码做UI尤其是布局. 找了一下发现可以安装windowbuilder来实现java的可视化编程,但是很多资料里的连接都失效了. 刚自己 ...
- eQTL
首先QTL是数量性状位点,比如身高是一个数量性状,其对应的控制基因的位点就是一个数量性状位点,而eQTL就是控制数量性状表达位点,即能控制数量性状基因(如身高基因)表达水平高低的那些基因的位点. 数量 ...
- spring mvc 资源包的映射
在springmvc.xml中进行设置: <?xml version="1.0" encoding="UTF-8"?> <beans xmln ...
- SpringMvc项目中使用GoogleKaptcha 生成验证码
前言:google captcha 是google生成验证码的一个工具类,其原理是将随机生成字符串保存到session中,同时以图片的形式返回给页面,之后前台页面提交到后台进行对比. 1.jar包准备 ...
- JDBC 的编程步骤
1.加载数据库驱动 2.获得数据库连接 3.创建语句 4.执行查询 5.遍历结果集 6.关闭数据库连接 尽量把数据库的连接步骤写成一个单独的java类,使用的时候直接new一个对象, import j ...