本思路仅供参考,数据强一点应该该会被卡。

本蒟蒻没有打 \(link\) - \(cut\) - \(tree\) .

而是用暴力水了过去。

具体思路很简单,先二分最少的 \(a_i\) , 再在 \(judge\) 的时候再二分 \(b_i\).

然后使用并查集来判断是否联通,复杂度 \(n(logn)^3\)

但是第一遍只有 \(75\) 分 , 于是我写了两遍二分套二分,即先是以 \(a_i\) 为第一个二分的,然后再以 \(b_i\) 为第一个二分的,最后两者取较小的答案。

然后... 就 \(AC\) 了。

暴力真的是个美妙的东西。

Code :

#include<bits/stdc++.h>
#define in(x) x=read()
#define N 50008
#define M 100008 using namespace std;
struct sj{int y,x,a,b;}a[M*2];
int n,m,ans_A=M*2,ans_B=M*2,fa[N];
int Ans_A=M*2,Ans_B=M*2,Fa[N]; int read()
{
char ch=getchar(); int f=1,w=0;
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){w=w*10+ch-'0';ch=getchar();}
return f*w;
} int find(int x){
if(x==fa[x])return x;
return fa[x]=find(fa[x]);
} void join(int x,int y){
x=find(x); y=find(y);
if(x!=y)fa[x]=y;
} bool jud(int A,int B)
{
for(int i=1;i<=n;i++) fa[i]=i;
for(int i=1;i<=m;i++)
if(a[i].a<=A&&a[i].b<=B)
join(a[i].x,a[i].y);
if(find(1)==find(n))return 1;
return 0;
} bool solve(int A)
{
int L=0,R=N*2,ans=-1;
while(L<=R)
{
int B=L+R>>1;
if(jud(A,B))
ans=B,R=B-1;
else L=B+1;
}
if(ans==-1)return 0;
if(ans_A+ans_B>A+ans)
ans_A=A,ans_B=ans;
return 1;
} bool Jud(int A,int B)
{
for(int i=1;i<=n;i++) fa[i]=i;
for(int i=1;i<=m;i++)
if(a[i].b<=A&&a[i].a<=B)
join(a[i].x,a[i].y);
if(find(1)==find(n))return 1;
return 0;
} bool Solve(int A)
{
int L=0,R=N*2,ans=-1;
while(L<=R)
{
int B=L+R>>1;
if(Jud(A,B))
ans=B,R=B-1;
else L=B+1;
}
if(ans==-1)return 0;
if(Ans_A+Ans_B>A+ans)
Ans_A=A,Ans_B=ans;
return 1;
} int main()
{
//freopen("disanti.in","r",stdin);
//freopen("disanti.out","w",stdout);
in(n); in(m);
for(int i=1;i<=m;i++)
in(a[i].x),in(a[i].y),
in(a[i].a),in(a[i].b);
int l=0,r=N*2;
while(l<=r)
{
int mid=l+r>>1;
if(solve(mid))r=mid-1;
else l=mid+1;
} l=0,r=N*2;
while(l<=r)
{
int mid=l+r>>1;
if(Solve(mid))r=mid-1;
else l=mid+1;
} if(ans_A==M*2&&ans_B==M*2)puts("-1");
else cout<<min(Ans_A+Ans_B,ans_A+ans_B)<<endl;
return 0;
}

[NOI2014] 魔法森林 (二分答案,并查集)的更多相关文章

  1. [HNOI2006]公路修建问题 (二分答案,并查集)

    题目链接 Solution 二分答案+并查集. 由于考虑到是要求花费的最小值,直接考虑到二分. 然后对于每一个二分出来的答案,模拟 \(Kruskal\) 的过程再做一遍连边. 同时用并查集维护联通块 ...

  2. 洛谷P1991无线通讯网[kruskal | 二分答案 并查集]

    题目描述 国防部计划用无线网络连接若干个边防哨所.2 种不同的通讯技术用来搭建无线网络: 每个边防哨所都要配备无线电收发器:有一些哨所还可以增配卫星电话. 任意两个配备了一条卫星电话线路的哨所(两边都 ...

  3. BZOJ 1196 [HNOI2006]公路修建问题(二分答案+并查集)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1196 [题目大意] 对于每条可能维修的公路可选择修一级公路或者二级公路,价值不同 要求 ...

  4. HDU-3081-Marriage Match 2(最大流, 二分答案, 并查集)

    链接: https://vjudge.net/problem/HDU-3081 题意: Presumably, you all have known the question of stable ma ...

  5. 【BZOJ1594】[Usaco2008 Jan]猜数游戏 二分答案+并查集

    [BZOJ1594][Usaco2008 Jan]猜数游戏 Description 为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力. 游戏开始前,一头指定的奶牛会在 ...

  6. [luoguP2387] 魔法森林(LCT + 并查集)

    传送门 并查集真是一个判断连通的好东西! 连通性用并查集来搞. 把每一条边按照 a 为关键字从小到大排序. 那么直接枚举,动态维护 b 的最小生成树 用 a[i] + 1 ~ n 路径上最大的 b[i ...

  7. poj-3657 Haybale Guessing(二分答案+并查集)

    http://poj.org/problem?id=3657 下方有中文版,不想看英文的可直接点这里看中文版题目 Description The cows, who always have an in ...

  8. HNOI2006-公路修建问题(二分答案+并查集)

    公路修建问题 OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那里的交通情况还是很糟糕.所以,OIER Association组织成立了,旨 ...

  9. BZOJ 1196 二分答案+并查集

    http://www.lydsy.com/JudgeOnline/problem.php?id=1196 题目大意:n个城市,m-1条路,每条路有一级公路和二级公路之分,你要造n-1条路,一级公路至少 ...

随机推荐

  1. 002-es5.4.3结合spring-data-elasticsearch3.0.0.0使用

    一.使用前设置 1.elasticsearch开启 cmd下,进入安装目录 cd D:\developToool\elasticsearch-5.4.3 elasticsearch # 或者后台运行 ...

  2. CAS KVM 虚拟机的保护与恢复

    目录 目录 方式一 方式二 方式一 思路:以 QCOW2 格式来备份和恢复被保护的 KVM 虚拟机 Step1:centos7_0(base qcow2) 以 qcow2 格式写入到 iSCSI 设备 ...

  3. 测开之路九十七:js的引用方式

    第一种:引用外部js文件 准备一个js文件 <!-- 引用外部的js --><script src="../js/js01.js"></script& ...

  4. Golang闭包的坑

    team leader 发现一个Golang程序的bug,是由不正确使用闭包引起.记载一下,以作备忘. 猜猜一下程序的结果: import ( "fmt" "time&q ...

  5. 当我写下Map<String,Object> map = new HashMap<>() https://www.jianshu.com/p/6b2e350e99be

    当我写下Map<String,Object> map = new HashMap<>();我到底在写什么? 我什么时候会写HashMap? 一个函数同时需要返回 多种 状态的情 ...

  6. Java 基础-IO、stream 流、文件操作

    输入输出流的分类 在 java.io 包中,包含了输入输出操作所需的类. I/O 流可以安装不同的标准分类: 按照流的方向分类: 输入流:将信息从代码外部输入代码 输出流:将代码得到的数据输出到文件. ...

  7. Python文件读写基本操作

    https://www.jianshu.com/p/eab35af27e1c 1.打开文件操作 方法一: f = open('/mypy/test.txt') print f # 输出:<ope ...

  8. 应用安全 - SuiteCRM - 漏洞汇总

    CVE-2019-12598.CVE-2019-12601 SuiteCRM SQL注入与远程代码执行漏洞 SalesAgility SuiteCRM .x版本..x版本和7..5之前的7..x版本中 ...

  9. 002/CDN-内容分发网络

    CDN-内容分发网络 来自于今日头条: https://www.toutiao.com/a6531234862563590663/?tt_from=weixin&utm_campaign=cl ...

  10. 利用Redisson实现分布式锁及其底层原理解析

    Redis介绍 参考地址:https://blog.csdn.net/turbo_zone/article/details/83422215 redis是一个key-value存储系统.和Memcac ...