BZOJ1050 [HAOI2006]旅行comf[并查集判图连通性]
★
Description
体现了并查集实际作用的一道题,也就是判图连通性。几句总结:
最小化或最大化一个分数时通常可以二分,但是也可以去设法最大or最小化分子分母。二分不好check的话就可以尝试后者。
据说二分带点优化其实是可以的,然而我不会。根据上面那则提示,因为最大边和最小边无法同时分别最小和最大化,所以可以先固定分母(最小边)。然后要求分子尽可能小。就是说找大于最小边的一些边让s到t连通,最小化那个最大边。那么对于最小的最大边,只要从最小边开始从小到大不停加边,直到s与t连通时立即停止即可,找到的一定是最小的最大边,正确性很容易证(最小的可行解之前的所有边都无法使其连通,而当前为第一个可行解,即最小)。于是枚举最小边并查集维护连通性就行,$O(N^{2}α(N))$稍有点卡,但是能过。可以把除法比较转换成乘法比较加一点速。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#define dbg(x) cerr<<#x<<" = "<<x<<endl
#define ddbg(x,y) cerr<<#x<<" = "<<x<<" "<<#y<<" = "<<y<<endl
using namespace std;
typedef long long ll;
typedef double db;
template<typename T>inline char MIN(T&A,T B){return A>B?A=B,:;}
template<typename T>inline char MAX(T&A,T B){return A<B?A=B,:;}
template<typename T>inline T _min(T A,T B){return A<B?A:B;}
template<typename T>inline T _max(T A,T B){return A>B?A:B;}
template<typename T>inline T read(T&x){
x=;int f=;char c;while(!isdigit(c=getchar()))if(c=='-')f=;
while(isdigit(c))x=x*+(c&),c=getchar();return f?x=-x:x;
}
const int N=+;
struct thx{
int u,v,w;
inline bool operator <(const thx&orz)const{
return w<orz.w;
}
}e[N];
int fa[N],n,m,s,t,p=,q=;
inline int Get(int x){return fa[x]^x?fa[x]=Get(fa[x]):x;}
inline int gcd(int a,int b){return b?gcd(b,a%b):a;} int main(){//freopen("test.in","r",stdin);//freopen("test.out","w",stdout);
read(n),read(m);
for(register int i=;i<=m;++i)read(e[i].u),read(e[i].v),read(e[i].w);
sort(e+,e+m+);read(s),read(t);
for(register int i=;i<=m;++i){
int j;for(j=;j<=n;++j)fa[j]=j;
for(j=i;j<=m;++j){
fa[Get(e[j].u)]=Get(e[j].v);
if(Get(s)==Get(t))break;
}
if(Get(s)==Get(t))if(p*e[i].w>q*e[j].w)p=e[j].w,q=e[i].w;
}
if(p>)printf("IMPOSSIBLE\n");
else p%q==?printf("%d",p/q):printf("%d/%d\n",p/gcd(p,q),q/gcd(p,q));
return ;
}
BZOJ1050 [HAOI2006]旅行comf[并查集判图连通性]的更多相关文章
- BZOJ1050: [HAOI2006]旅行comf(并查集 最小生成树)
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4021 Solved: 2257[Submit][Status][Discuss] Descript ...
- 【BZOJ1050】[HAOI2006]旅行comf 并查集
[BZOJ1050][HAOI2006]旅行comf Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<300 ...
- BZOJ 1050: [HAOI2006]旅行comf( 并查集 )
将edge按权值排序 , O( m² ) 枚举边 , 利用并查集维护连通信息. ------------------------------------------------------------ ...
- BZOJ 1050: [HAOI2006]旅行comf (并查集 或 单调队列)
这是建空间后做的第一道题啊= =好水 排序,枚举最小边,然后并查集求出联通时的最大边 或者排次序,从小到大插边,如果插边时最小的边拿掉不会使s与t不联通,就删去。 code: #include< ...
- BZOJ-1050 旅行comf 并查集+乱搞
好久以前codevs上做过的,拿着改了改.. 1050: [HAOI2006]旅行comf Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2194 S ...
- bzoj1050[HAOI2006]旅行comf(枚举+贪心+并查集)
Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求一条路径,使得路径上最大 ...
- HYSBZ - 1050(旅行comf 并查集Java实现)
HYSBZ - 1050(旅行comf Java实现) 原题地址 解法:枚举每一条边,对于这条边,我们需要找到集合中和其值相差最小的最大边,这个集合是指与包括i边在内的ST联通集.对于这一要求,我们只 ...
- bzoj1050: [HAOI2006]旅行comf
Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求一条路径,使得路径上最大 ...
- 1050. [HAOI2006]旅行【并查集+枚举】
Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求 一条路径,使得路径上最 ...
随机推荐
- Debian系统软件安装
查看已安装软件 dpkg -l | grep -i name apt-get remove name 建议用root安装,有一些工具,使用非root用户安装后,仍然不识别命令,可能跟权限有关. net ...
- Day02:基本IO操作
IO流 基本IO与OS 按照流的方向主要分为输入流和输出流. 数据流按照数据单位的不同分为字节流和字符流. 按照功能可以划分节点流和处理流. 节点流与处理流 按照流是否直接与特定的地方(如磁盘.内存. ...
- 记录一次MySQL进程崩溃,无法重启故障排查
最近程序在跑着没几天,突然访问不了,查看应用进程都还在.只有数据库的进程down掉了.于是找到日志文件看到如下错误 -- :: [Note] InnoDB: Initializing buffer p ...
- windows server 2008 R2 怎么集成USB3.0驱动
DELL最新出的T130.T330.R230.R330四款服务器新增了USB3.0功能,在安装2008 R2系统镜像需要集成USB3.0才能安装,不然鼠标和键盘动不了 先在D盘创建一个文件夹Temp, ...
- Java字节流文件封装
/** * 字节流封装方法 */ import java.io.FileInputStream; import java.io.FileNotFoundException; import jav ...
- Jenkins中shell-script执行报错sh: line 2: npm: command not found
<1>本地执行npm run build--正常 <2>查看环境变量--正常 [root@localhost bin]# echo $PATH /usr/local/node/ ...
- flink部署
参考: https://ververica.cn/developers-resources/ #flink参数 https://blog.csdn.net/qq_35440040/article/de ...
- 海量数据和高并发下的 Redis 业务优化实践
本文内容是我在 6 月 23 日参加的深圳 GIAC 技术大会上演讲的文字稿. 观众朋友们,我是来自掌阅的工程师钱文品,掘金小册<Redis 深度历险>的作者.今天我带来的是分享主题是:R ...
- rabbitmq五种消息模型整理
目录 0. 配置项目 1. 基本消息模型 1.1 生产者发送消息 1.2 消费者获取消息(自动ACK) 1.3 消息确认机制(ACK) 1.4 消费者获取消息(手动ACK) 1.5 自动ACK存在的问 ...
- python之成像库pillow
目录 python之成像库pillow 官方文档 图像模块(Image.Image) Image模块的功能 Image.new(mode,size,color): Image.open(file,mo ...