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,求 一条路径,使得路径 ...
随机推荐
- iOS 之 设置控件在视图中心位置
_qrImgView.bounds = CGRectMake(0, 0, sizeImg, sizeImg); _qrImgView.center = CGPointMake(CGRectGetWid ...
- .net 设置版本号信息
1.AssemblyInfo.cs [assembly: AssemblyVersion("1.3.170116")] [assembly: AssemblyFileVersion ...
- 使用菜单(Menu)资源
前面已经介绍过Android的菜单支持,前面介绍菜单时分别介绍了如何使用Java代码来实现菜单和使用XML资源文件定义菜单. 实际上Android推荐使用XML资源文件来定义菜单,使用XML资源文件定 ...
- 使用(Drawable)资源———ClipDrawable资源
ClipDrawable代表从其他位图上截取的一个"图片片段".在XML文件中定义ClipDrawable对象使用<clip.../>元素,该元素的语法为: <? ...
- log4net的分类型输出文件的配置
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSe ...
- svg defs 进行定义 引用
svg defs 进行定义 引用: <%@ page language="java" contentType="text/html; charset=UTF-8&q ...
- WPF实现多值绑定特性以及多值转换
WPF中的实现 我们首先来看一下常规的绑定 <Window x:Class="WpfApplicationSample.MainWindow" xmlns=&qu ...
- WebSocket协议再认识
WebSocket出现之前 在线聊天室.在线客服系统.评论系统.WebIM等这些应用有一个共同点,就是用户不需要去刷新浏览器就能够从服务器获得最新的数据,这就用到了推送技术. WebSocket出现之 ...
- javascript实现页面滚屏效果
当我们浏览网页的时候,时常会碰到可以滚动屏幕的炫酷网页,今天笔者对这一技术进行简单实现,效果不及读者理想中那般炫酷,主要针对滚屏的技术原理和思想进行分享和分析.本示例在页面右侧有五个数字标签,代表五个 ...
- HDU5692(线段树+dfs序)
Snacks Time Limit:5000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Statu ...