[CF981F]Round Marriage[二分+霍尔定理]
题意
分析
- 参考了Icefox
- 首先二分,然后考虑霍尔定理判断是否有完美匹配。如果是序列的话,因为这里不会出现 \(j<i,L(i)<L(j)\) 或者 \(j<i,R(i)<R(j)\) 的情况,所以可以不用线段树,直接判断是否存在 \(j,i(j<i)\) 满足 \(R(i)-L(j)+1<i-j+1\) (只需要判断连续的一段)。
- 因为是环,考虑将 \(a,b\) 数列分别倍长,但是发现环上到达某个 \(b\) 仍然需要讨论。此时只需要在最左边和最右边再加一倍 \(b\) 序列就可以处理了。
- 总时间复杂度 \(O(nlogn)\) 。
总结这种霍尔定理的套路:
- 对于同样的 \(\digamma\) 能够增加 \(x\) 集合的大小就增加。
- 当 \(x\) 集合可以拆成两个 $\digamma $ 不相交的集合时一定分开讨论。
- 对于同样种类(大小)的 \(x\) 集合只讨论最具有影响力的。
- "非完美算法" 思想在查找 \(\digamma(x)\)(并集) 时的体现。
- 讨论二分图的哪一边取决于是否便于操作。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define go(u) for(int i = head[u], v = e[i].to; i; i=e[i].lst, v=e[i].to)
#define rep(i, a, b) for(int i = a; i <= b; ++i)
#define pb push_back
#define re(x) memset(x, 0, sizeof x)
inline int gi() {
int x = 0,f = 1;
char ch = getchar();
while(!isdigit(ch)) { if(ch == '-') f = -1; ch = getchar();}
while(isdigit(ch)) { x = (x << 3) + (x << 1) + ch - 48; ch = getchar();}
return x * f;
}
template <typename T> inline void Max(T &a, T b){if(a < b) a = b;}
template <typename T> inline void Min(T &a, T b){if(a > b) a = b;}
const int N = 2e5 + 7, inf = 0x3f3f3f3f;
int n, L;
LL a[N << 1], b[N << 2];
bool check(int mid) {
int mx = -inf;
for(int i = 1, j1 = 1, j2 = 1; i <= 2 * n; ++i) {
while(j1 <= 4 * n && b[j1] < a[i] - mid) ++j1;
while(j2 <= 4 * n && b[j2] <= a[i] + mid) ++j2;
Max(mx, j1 - i);
if(j2 - i - 1 < mx) return 0;
}
return 1;
}
int main() {
n = gi(), L = gi();
rep(i, 1, n) a[i] = gi();
sort(a + 1, a + 1 + n);
rep(i, 1, n) b[i] = gi();
sort(b + 1, b + 1 + n);
for(int i = 1; i <= n; ++i) a[i] += L, a[i + n] = a[i] + L;
for(int i = 1; i <= 3 * n; ++i) b[i + n] = b[i] + L;
int l = 0, r = L / 2;
while(l < r) {
int mid = l + r >> 1;
if(check(mid)) r = mid;
else l = mid + 1;
}
printf("%d\n", l);
return 0;
}
[CF981F]Round Marriage[二分+霍尔定理]的更多相关文章
- 【CF981F】Round Marriage(二分答案,二分图匹配,Hall定理)
[CF981F]Round Marriage(二分答案,二分图匹配,Hall定理) 题面 CF 洛谷 题解 很明显需要二分. 二分之后考虑如果判定是否存在完备匹配,考虑\(Hall\)定理. 那么如果 ...
- 【LOJ523】[LibreOJ β Round #3]绯色 IOI(悬念)(霍尔定理_基环树)
题目 LOJ523 官方题解 分析 由于某些原因,以下用「左侧点」和「右侧点」分别代替题目中的「妹子」和「男生」. 根据题意,显然能得出一个左侧点只能向一个或两个右侧点连边.这似乎启发我们把左侧点不看 ...
- [CSP-S模拟测试]:party?(霍尔定理+最小割+树链剖分)
题目描述 $Treeland$国有$n$座城市,其中$1$号城市是首都,这些城市被一些单向高铁线路相连,对于城市$i\neq 1$,有一条线路从$i$到$p_i(p_i<i)$.每条线路都是一样 ...
- 【题解】 bzoj1135: [POI2009]Lyz (线段树+霍尔定理)
题面戳我 Solution 二分图是显然的,用二分图匹配显然在这个范围会炸的很惨,我们考虑用霍尔定理. 我们任意选取穿\(l,r\)的号码鞋子的人,那么这些人可以穿的鞋子的范围是\(l,r+d\),这 ...
- 【题解】 bzoj3693: 圆桌会议 (线段树+霍尔定理)
bzoj3693 Solution: 显然我们可以把人和位置抽象成点,就成了一个二分图,然后就可以用霍尔定理判断是否能有解 一开始我随便YY了一个\(check\)的方法:就是每次向后一组,我们就把那 ...
- 【题解】 AtCoder ARC 076 F - Exhausted? (霍尔定理+线段树)
题面 题目大意: 给你\(m\)张椅子,排成一行,告诉你\(n\)个人,每个人可以坐的座位为\([1,l]\bigcup[r,m]\),为了让所有人坐下,问至少还要加多少张椅子. Solution: ...
- Codeforces 1009G Allowed Letters FMT,二分图,二分图匹配,霍尔定理
原文链接https://www.cnblogs.com/zhouzhendong/p/CF1009G.html 题目传送门 - CF1009G 题意 给定一个长度为 $n$ 的字符串 $s$ .并给定 ...
- [hdu5503]EarthCup[霍尔定理]
题意 一共 \(n\) 只球队,两两之间会进行一场比赛,赢得一分输不得分,给出每只球队最后的得分,问能否构造每场比赛的输赢情况使得得分成立.多组数据 \(T\le 10,n\le 5\times 10 ...
- [CF1009G]Allowed Letters[贪心+霍尔定理]
题意 给你一个长为 \(n\) 的串,字符集为 \(a,b,c,d,e,f\) .你可以将整个串打乱之后重新放置,但是某些位置上有一些限制:必须放某个字符集的字符.问字典序最小的串,如果无解输出 &q ...
随机推荐
- python 实现线程安全的单例模式
单例模式是一种常见的设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. 比如,服务器的配置信息写在一个文件中online. ...
- LeetCode题解之Swap Nodes in Pairs
1.题目描述 2.问题分析 对两个节点进行交换操作 3.代码 ListNode* swapPairs(ListNode* head) { if( !head || head->next == N ...
- C#中使用反射遍历一个对象属性和值以及百分数
对某个类的实例化对象, 遍历获取所有属性(子成员)的方法(采用反射): using (var context = new YZS_TRAEntities()) { ).FirstOrDefault() ...
- [POWERSHELL] [.net 3.5] [Windows Server] 在Windows Server上安装.NET3.5
Install-WindowsFeature Net-Framework-Core -source \\network\share\sxs
- fedora 中从命令行中直接打开资源管理器
windows 中 使用 start . 可以实现 macos 中 使用 open . 可以实现 linux 中 可以使用 nautilus . 可以实现 了解nautilus 详细的使用说明,可以 ...
- Docker 使用入门,创建一个Nginx服务器
运行环境: MAC Docker 版本: Docker version 17.12.0-ce, build c97c6d6 一.启动Nginx 服务器 启动Nginx 服务器,并进入模拟终端 dock ...
- MySQL权限管理分配
之前一直忽视了MySQL的权限这一块的内容,以为一般般的知识点,随时用随时学就好了,导致自己这方面稍微有点不太明白的地方,总是踩坑,所以后来就总结一下: 1.MySQL权限系统的工作原理 .对连接的用 ...
- Apache的安装与AWstats分析系统
实验拓扑图: 实验要求: 1. WEB服务器: 使用源码包apache实现.安装完成后,并优化执行路径. 启动服务后,客户端通过http://IP能访问默认的网站. 2. DNS服务器: 安装DN ...
- Android权限申请完全解析(一):Android自带的权限申请
1.为什么要权限申请 6.0以上就需要了,别问为什么.(不是重点,自行搜索) 2.如何进行权限申请 Android自带的权限申请 EasyPermission权限申请 Ps:EasyPermissio ...
- 【Alpha 冲刺】 10/12
今日任务总结 人员 今日原定任务 完成情况 遇到问题 贡献值 胡武成 完成app端api编写 未完成 Json格式出了点问题,修复中 孙浩楷 图片在线编辑器插件引入 未完成 耦合了,结果另外一个那边做 ...