[并查集]BZOJ 1050——[HAOI2006]旅行comf
1050: [HAOI2006]旅行comf
题目描述
给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000)。给你两个顶点S和T,求一条路径,使得路径上最大边和最小边的比值最小。如果S和T之间没有路径,输出”IMPOSSIBLE”,否则输出这个比值,如果需要,表示成一个既约分数。 备注: 两个顶点之间可能有多条路径。
解题思路
非常水的题目,为什么我第一个想到的是O(m2logV)O(m^2logV),就是枚举下界,二分枚举上界,用并查集验证。其实二分枚举完全可是舍去,就是提前把边按权值排序,用并查集不断连边,如果发现s,t在同一个联通块就停止。
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=505,maxm=5005;
int n,m,s,t,mx,ansx,ansy,f[maxn];
struct jz{int x,y,z;bool operator<(const jz &b)const{return z<b.z;}
}e[maxm];
int gcd(int x,int y){if (x%y==0) return y;else return gcd(y,x%y);
}
int get(int x){if (f[x]==x) return x;f[x]=get(f[x]);return f[x];
}
int main(){freopen("exam.in","r",stdin);freopen("exam.out","w",stdout);scanf("%d%d",&n,&m);for (int i=1;i<=m;i++){scanf("%d%d%d",&e[i].x,&e[i].y,&e[i].z);mx=max(mx,e[i].z);}scanf("%d%d",&s,&t);ansx=1,ansy=mx;sort(e+1,e+m+1);for (int i=1;i<=m;i++){for (int j=1;j<=n;j++) f[j]=j;int k=m+1;for (int j=i;j<=m;j++){f[get(e[j].x)]=get(e[j].y);if (get(s)==get(t)){k=j;break;}}if (k>m) {if (i==1) {printf("IMPOSSIBLE\n");return 0;}break;}if ((double)e[k].z/e[i].z<(double)ansy/ansx) ansx=e[i].z,ansy=e[k].z;}int k=gcd(ansx,ansy);ansx/=k;ansy/=k;if (ansx==1) printf("%d\n",ansy);else printf("%d/%d\n",ansy,ansx);return 0;
}
[并查集]BZOJ 1050——[HAOI2006]旅行comf相关推荐
- BZOJ 1050 [HAOI2006]旅行comf(并查集)
1050: [HAOI2006]旅行comf Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000). ...
- bzoj 1050: [HAOI2006]旅行comf(尺取+最短路)
1050: [HAOI2006]旅行comf Time Limit: 10 Sec Memory Limit: 162 MB Submit: 3335 Solved: 1852 [Submit][ ...
- BZOJ 1050 HAOI2006 旅行comf
1050: [HAOI2006]旅行comf Time Limit: 10 Sec Memory Limit: 162 MB Submit: 3715 Solved: 2070 [Submit][ ...
- bzoj 1050: [HAOI2006]旅行comf(codevs.cn 1001 舒适的路线) 快排+并查集乱搞
没用的话:好像很久没发博客了,主要是懒太蒟找不到水题.我绝对没弃坑...^_^ 还用些话:本文为博主原创文章,若转载请注明原网址和作者. 进入正题: 先pa网址: bzoj :http://www.l ...
- bzoj 1050: [HAOI2006]旅行comf(并查集)
算法:并查集 难度:NOIP 题解: 将所有边权从小到大排序,正序枚举最小边,在以第i条边为最短边的情况下,枚举j(权值比i大的边),用并查集维护全图的连通性,如果s,t已经连通,并且做到可以更新答案 ...
- BZOJ 1050 [HAOI2006]旅行comf(最小生成树)
题意 第一行包含两个正整数,N和M.下来的M行每行包含三个正整数:x,y和v.表示景点x到景点y之间有一条双向公路 ,车辆必须以速度v在该公路上行驶.最后一行包含两个正整数s,t,表示想知道从景点s到 ...
- BZOJ 1050: [HAOI2006]旅行comf
Time Limit: 10 Sec Memory Limit: 162 MB Submit: 3380 Solved: 1877 Description 给你一个无向图,N(N<=500)个顶 ...
- 【BZOJ 1050】旅行comf
[题目] 题目传送门旅行comf Description 给你一个无向图,( ≤ 500)个顶点, ( ≤ 5000)条边,每条边有一个权值 ( < 30000).给你两个顶点 和 ,求一条路 ...
- 1050: [HAOI2006]旅行comf
Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求 一条路径,使得路径上最 ...
最新文章
- C#中统计程序运行时间
- 日常生活小技巧 -- 惠普 Windows10 进入安全模式
- 华字后面配什么字比较好_涟字女孩取名字含义 带涟好名推荐
- Python+人工智能的超强组合,再不学就跟不上时代啦!
- spark中local模式与cluster模式使用场景_Spark内核及通信框架概述-针对面试(后面有源码分析)...
- java集合框架介绍_Java集合框架全面介绍(一)
- 如何使用 python 爬取全国小区名称
- c# 中崎_C# 打开钱箱支持北洋、佳博、爱普生
- 路径规划-人工势场法(Artificial Potential Field)
- android 8187驱动 win7,8187无线网卡驱动,教您Realtek瑞昱8187无线网卡驱动
- matlab所有颜色,MATLAB 颜色选择及应用
- qq邮箱的er图_QQ邮箱正确格式
- DAMA数据管理知识体系指南之数据安全管理
- Pandas中DataFrame基本函数整理(全)
- 昨天你用的 YYYY-MM-dd 被同事锤了吗?
- 北京某电信运营商数据中心暖通节能技术和应用
- 基于struts2的留言板系统简单实现jdbc分页
- C语言中关于除法和取余的理解
- Mysql基础之natural 自然连接
- DaVinci DM6437 中文教程
热门文章
- 苹果系统 如何快速访问服务器,mac下的finder怎么使用技巧 苹果系统如何快速打开Finder...
- web 框架的本质及自定义web框架 模板渲染jinja2 mvc 和 mtv框架 Django框架的下载安装 基于Django实现的一个简单示例...
- 初学者基于paddle的计算机视觉快速上手项目
- poj2249Binomial Showdown
- python educoder苹果梨子_pythoneducoder苹果梨子煮水的功效_苹果梨子汤的功效
- 友盟用户反馈自定义UI-Android
- c语言做相册影集,制作DIY相册影集教程-如何制作影集
- php guzzlehttp,PHP 使用 Guzzle 发送 HTTP 请求
- ImproperlyConfigured: mysqlclient 1.4.0 or newer is required; you have 0.10.1.
- Cesium.js解析第一篇 Cartesian3