做这个题之前首先要了解判定二分图有没有完备匹配的Hall定理: 那么根据Hell定理,如果任何一个X子集都能连大于等于|S|的Y子集就可以获得完备匹配,那么就是: 题目变成只要不满足上面这个条件就能得到完备匹配,注意到右边的这个dk是一个常数,那么我们就可以只考虑左边最大的是否满足就行了. 那么我们就可以在修改过程中一边在线段树上修改一边查询区间最大值作比较就可以了. #include <bits/stdc++.h> using namespace std; ; typedef long lo…
题目链接 先考虑链.题目相当于求是否存在完备匹配.那么由Hall定理,对于任意一个区间[L,R],都要满足[li,ri]完全在[L,R]中的ai之和sum小于等于总位置数,即R-L+1.(其实用不到Hall定理,显然) 为什么不是子集呢,因为区间并和子集等价,所有区间并都是要验证的. 而且可以发现,只有当R为某个r[i],L为某个l[j]时,[L,R]才有必要验证. 所以我们将区间按r[]排序,枚举每个r[i]作为R.限制条件为\(sum<=R-L+1\)即\(sum+L-1<=R\),对于前…
题目链接 首先Bi之间的大小关系没用,先对它排序,假设从小到大排 那么每个Ai所能匹配的Bi就是一个B[]的后缀 把一个B[]后缀的匹配看做一条边的覆盖,设Xi为Bi被覆盖的次数 容易想到 对于每个i∈[1,m]都要满足 Xi-i >= 0,即min{Xi-i}>=0 (Hall定理) 用线段树维护即可 感觉不需要霍尔定理也能看出来(因为就是显然吧..) //583ms 4140KiB #include <cstdio> #include <cctype> #inclu…
题意:给出一个长度为 n的数列 a和一个长度为 m 的数列 b,求 a有多少个长度为 m的连续子数列能与 b匹配.两个数列可以匹配,当且仅当存在一种方案,使两个数列中的数可以两两配对,两个数可以配对当且仅当它们的和不小于 h. 题解:先把b排序,要想能匹配,由hall定理,b的每个子集(大小为x)都至少有x条连向b,bi递增,和bi连的边也递增,那么当bi连边大于等于i时即可,所以当min(bi-i)>=0时满足条件 线性扫一遍即可,每个a二分b更新线段树即可 //#pragma GCC opt…
题意 题目链接 Sol 好的又是神仙题... 我的思路:对于区间分两种情况讨论,一种是完全包含,另一种是部分包含.第一种情况非常好判断,至于计算对于一个区间[l, r]的$\sum a[i]$就可以了,但是后两种呢?qwq.想了半天也没想出来.看了下题解,果然还有更高端的操作! 首先这题可以看是二分图匹配,最暴力的写法是对于每个a[i],直接拆成a[i]个点,然后分别向$[l_i, r_i]$连边,最后看是否能完全匹配. 有一个专门判断这玩意儿的定理: Hall定理:二部图G中的两部分顶点组成的…
题意: 有 n 群怨灵排成一排,燐每秒钟会选择一段区间,消灭至多 k 只怨灵. 如果怨灵数量不足 k,则会消灭尽量多的怨灵. 燐作为一只有特点的猫,它选择的区间是不会相互包含的.它想要知道它每秒最多能消灭多少怨灵. 要求:在之前每次都消灭尽量多的怨灵的情况下,求第 i 秒最多能消灭的怨灵的数量. 首先,这题可以用网络流做部分分. 考虑如何判断是否可行: 有一种显然的二分图匹配:把每个询问放在X部,怨灵放在Y部. 然后,把询问,怨灵分别拆点,进行区间连边,做匹配,如果有完美匹配,则可行. 但是,如…
题面传送门 首先 \(b_i\) 的顺序肯定不会影响匹配,故我们可以直接将 \(b\) 数组从小到大排个序. 我们考虑分析一下什么样的长度为 \(m\) 的数组 \(a_1,a_2,\dots,a_m\) 能和 \(b\) 数组形成匹配.考虑对于 \(i,j\in [1,m]\),若 \(a_i+b_j\geq h\),就在 \(i,j\) 之间连边,那么形成的图必然是一张二分图,我们只需检验这张二分图是否存在完美匹配即可. 这时候就要用到一个叫做 Hall 定理的科技了.Hall 定理说的是这…
[BZOJ2138]stone Description 话说Nan在海边等人,预计还要等上M分钟.为了打发时间,他玩起了石子.Nan搬来了N堆石子,编号为1到N,每堆包含Ai颗石子.每1分钟,Nan会在编号在[Li,Ri]之间的石堆中挑出任意Ki颗扔向大海(好疼的玩法),如果[Li,Ri]剩下石子不够Ki颗,则取尽量地多.为了保留扔石子的新鲜感,Nan保证任意两个区间[Li,Ri]和[Lj,Rj],不会存在Li<=Lj&Rj<=Ri的情况,即任意两段区间不存在包含关系.可是,如果选择不…
---题面--- 题目大意: 有n个人,m个座位,每个人可以匹配的座位是[1, li] || [ri, m],可能有人不需要匹配座位(默认满足),问最少有多少人不能被满足. 题解: 首先可以看出这是一个二分图匹配,根据hall定理,我们只需要求出max(人的子集大小 -  被选出的人可以选的座位集合大小). 但是枚举人的复杂度太高,所以考虑枚举座位集合,因为每个人的可选区间都是一段前缀or后缀,因此要表达一个合法的座位集合,我们只需要所有人中最右边的li和最左边的ri即可. 如图所示: 因此这个…
题面 题目大意: 给你\(m\)张椅子,排成一行,告诉你\(n\)个人,每个人可以坐的座位为\([1,l]\bigcup[r,m]\),为了让所有人坐下,问至少还要加多少张椅子. Solution: 为什么加椅子?我们可以在最左边或最右边一直加直到人人都有座位. 首先这道题目抽象成二分图很简单,然后我们可以只要求解出人与座位的最大匹配是多少,总人数减去即可,但跑二分图最大匹配显然会超时,我们就可以往霍尔定理方面想. 然后你还需要知道一个霍尔定理推论:假设某个人的集合为\(X\),这个集合所对应的…
题意 题目链接 分析 又是一个二分图匹配的问题,考虑霍尔定理. 根据套路我们知道只需要检查 "区间的并是一段连续的区间" 这些子集. 首先将环倍长.考虑枚举答案的区间并的右端点 \(r\),显然 \(r\) 应该在某个区间的右端点上.我们想要判断是否存在一个 \(l\) 使得 \(r-l+1\le m\) 且 \(\sum\limits_{l\le L_i,R_i\le r}a_i>r-l+1\) ,扫描线+线段树 即可. 有一类特殊情况:区间的并是整个环,这时它在序列上的表示长…
题意 一共有 \(n\) 堆石子,每堆石子有一个数量 \(a\) ,你要进行 \(m\) 次操作,每次操作你可以在满足前 \(i-1\) 次操作的回答的基础上选择在 \([L_i,R_i]\) 区间中拿走至多 \(b\) 颗石子,保证区间不存在包含关系,求每次你最多拿走多少颗石子. \(n\le 4\times 10^4\) 分析 二分图匹配复杂度太高,考虑霍尔定理. 假设某次操作时我们已经知道了每次操作取走多少颗石子,我们选择判断的操作集合一定是按 \(L\) 排序之后连续的(因为能够选择的区…
传送门:http://uoj.ac/problem/299 题目良心给了Bayes定理,但对于我这种数学渣来说并没有什么用. 先大概讲下相关数学内容: 1.定义:$P(X)$ 表示事件$X$发生的概率,$E(X)$表示随机变量$X$的期望值,$P(A|B)$表示已知$B$发生,$A$发生的概率,$P(AB)$表示$A$和$B$同时发生的概率. 2.条件概率公式: $\begin{aligned}P(A|B)=\frac{P(AB)}{P(B)}\end{aligned}$. 由$P(B)P(A|…
题目链接 题意 : 给出一个 n 个元素的环.可以任意选择起点.选完起点后.可以行走 m 步.每次前进 k 个单位.所走到的点将产生正或负贡献.问你一开始得准备多少才能使得初始资金加上在环上获取最大利益不少于给定的 s 分析 : 对于一个环.固定步数下是有循环节的 不同循环节内的节点各不相同 根据裴蜀定理可得每个循环节的长度为 n / gcd(n, k) 所以共有 gcd(n, k) 个循环节 然后我们暴力扒出每一个循环节 循环节里面的元素放到一个新数组中.使其相邻 然后通过收尾相连接的方法模拟…
题意 题目链接 分析 这个二分图匹配模型直接建图的复杂度太高,考虑霍尔定理. 对于某些人组成的区间,我们只需要考虑他们的并是一段连续的区间的集合.更进一步地,我们考虑的人一定是连续的. 假设我们考虑的区间的总人数为 \(x\) ,区间长度为 \(len\), 那么 \(x-(len+d)*k>0\) 于是 \(x-k*len>dk\) ,维护连续最大和即可. 总时间复杂度为 \(O(nlogn)\). 代码 #include<bits/stdc++.h> using namespa…
题意 N个人抢M个椅子,M个椅子排成一排 ,第i个人只能坐[1,Li]∪[Ri,M],问最多能坐多少人 $i$人连边向可以坐的椅子构成二分图,题意即是求二分图最大完美匹配,由霍尔定理,答案为$max(|X|-\omega(X))$,$X$为人的集合,$\omega(X)$可以表示为$[1,l] \cup[r,M]$,所以可以枚举$\omega(X)$也就是$(l,r)$,求出最大的$|X|$,也就是满足$L_i\le l \land r \le R_i$的$i$的数量,也就是平面上以$(l,r)…
题意 地上 \(1\) 到 \(m\) 个位置摆上椅子,有 \(n\) 个人要就座,每个人都有座位癖好:选择 \(\le L\) 或者 \(\ge R\) 的位置.问至少需要在两边添加多少个椅子能让所有人坐满. \(m\le n\le 2\times 10^5\) 分析 因为最后的形式一定是左边和右边连续的一段+一些新加入的椅子.只需要求出所有人构成的子集 \(|x|-|\digamma (x)|\) 的最大值,不需要知道具体哪些椅子参与了完美匹配. 注意到区域的并除了全集以外仍然可以用 \([…
Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin), freopen(s".out","w",stdout) #define maxn 1000000 #define ll long long #define lson (now<<1) #define rson ((now<<1)|1) usin…
D - 小Z的加油店 HYSBZ - 5028   这个题目是一个线段树+差分+GCD 推荐一个差分的博客:https://www.cnblogs.com/cjoierljl/p/8728110.html 学会了这个简单差分之后,就可以把这个题目的区间更新转化成单点更新了,emmm...可能还是不太理解,那就说下具体思路吧. 这个题目一看感觉很难,然后就取看题解,这个看了题解之后发现裴蜀定理+线段树. 讲一下为什么是裴蜀定理+线段树,线段树应该没有什么异议,因为这个有区间更新区间查询,而且n,m…
Description 初始时滑冰俱乐部有1到n号的溜冰鞋各k双.已知x号脚的人可以穿x到x+d的溜冰鞋. 有m次操作,每次包含两个数ri,xi代表来了xi个ri号脚的人.xi为负,则代表走了这么多人. 对于每次操作,输出溜冰鞋是否足够. Input n m k d ( 1≤n≤200,000 , 1≤m≤500,000 , 1≤k≤10^9 , 0≤d≤n ) ri xi ( 1≤i≤m, 1≤ri≤n-d , |xi|≤10^9 ) Output 对于每个操作,输出一行,TAK表示够 NIE…
1135: [POI2009]Lyz Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 573  Solved: 280[Submit][Status][Discuss] Description 初始时滑冰俱乐部有1到n号的溜冰鞋各k双.已知x号脚的人可以穿x到x+d的溜冰鞋. 有m次操作,每次包含两个数ri,xi代表来了xi个ri号脚的人.xi为负,则代表走了这么多人. 对于每次操作,输出溜冰鞋是否足够. Input n m k d ( 1≤n≤2…
题面戳我 Solution 二分图是显然的,用二分图匹配显然在这个范围会炸的很惨,我们考虑用霍尔定理. 我们任意选取穿\(l,r\)的号码鞋子的人,那么这些人可以穿的鞋子的范围是\(l,r+d\),这个时候我们可以根据霍尔定理得出满足人人有鞋子穿的时候的式子是 令\(sum[i]\)表示穿\(i\)号鞋子的人数 \[\sum^r_{i=l} sum[i] \leq (r-l+1+d)*k\] 我们把这个式子整理下: \[\sum^r_{i=l} (sum[i]-k) \leq d*k\] 我们会…
[BZOJ1135][POI2009]Lyz Description 初始时滑冰俱乐部有1到n号的溜冰鞋各k双.已知x号脚的人可以穿x到x+d的溜冰鞋. 有m次操作,每次包含两个数ri,xi代表来了xi个ri号脚的人.xi为负,则代表走了这么多人. 对于每次操作,输出溜冰鞋是否足够. Input n m k d ( 1≤n≤200,000 , 1≤m≤500,000 , 1≤k≤10^9 , 0≤d≤n ) ri xi ( 1≤i≤m, 1≤ri≤n-d , |xi|≤10^9 ) Output…
[BZOJ2138]stone(线段树,Hall定理) 题面 BZOJ 题解 考虑一个暴力. 我们对于每堆石子和每个询问,显然是匹配的操作. 所以可以把石子拆成\(a_i\)个,询问点拆成\(K_i\)个,这样就是每次进行一次二分图的匹配. 当然可以用网络流+线段树优化连边来做,但是这样复杂度太高. 还是回到二分图的匹配问题,我们现在要验证的就是是否存在对于当前询问点的完美匹配. 关于完美匹配,有\(Hall\)定理,如果存在完美匹配,假设左侧的点有\(|X|\)个,那么这些点连向右边的点的点集…
传送门 题意: 现在有\(n\)堆石子,每堆石子有\(a_i\)个. 之后会有\(m\)次,每次选择\([l,r]\)的石子堆中的石子扔\(k\)个,若不足,则尽量扔. 现在输出\(1\)~\(m\)次,每次最多能取到多少石子(输出第\(i\)次的情况时,要考虑前\(i-1\)次). 给出的区间不存在包含关系. 思路: 稍微暴力点想就是一个二分图,将\(k_i\)拆在左边,然后石子在右边,每次最大匹配. 但这做法显然不可行,时间复杂度不能承受. 这种一般就考虑\(hall\)定理:假设前面都满足…
Description 话说Nan在海边等人,预计还要等上M分钟.为了打发时间,他玩起了石子.Nan搬来了N堆石子,编号为1到N,每堆 包含Ai颗石子.每1分钟,Nan会在编号在\([L_i,R_i]\)之间的石堆中挑出任意Ki颗扔向大海(好疼的玩法),如果\([L_i,R_i]\)剩下石子不够\(K_i\)颗,则取尽量地多.为了保留扔石子的新鲜感,Nan保证任意两个区间\([L_i,R_i]\)和\([L_j,R_j]\),不会存在\(L_i<=L_j\& R_j<=R_i\)的情况…
LINK:Phoenix and Memory 这场比赛标题好评 都是以凤凰这个单词开头的 有凤来仪吧. 其实和Hall定理关系不大. 不过这个定理有的时候会由于 先简述一下. 对于一张二分图 左边集合为S 右边集合为T 那么有完备匹配时 最大匹配数为 min(|S|,|T|). 这里不妨假设|S|<=|T|. 若存在完备匹配那么对于任意集合\(s\in S\)都有s连出的边>=|s|. 这个定理是一张二分图具有完备匹配的充分必要条件. 先证明必要性:如果不存在 那么一定有点无法匹配到. 再证…
题面 给出一个长度为 n n n 的数列 { a i } \{a_i\} {ai​} 和一个长度为 m m m 的数列 { b i } \{b_i\} {bi​},求 { a i } \{a_i\} {ai​} 有多少个长度为 m m m 的连续子数列能与 { b i } \{b_i\} {bi​} 匹配. 两个数列可以匹配,当且仅当存在一种方案,使两个数列中的数可以两两配对,两个数可以配对当且仅当它们的和不小于 h h h. 1 ≤ m ≤ n ≤ 150000. 1\leq m\leq n\…
题解: hall定理..第一次听说 思考了半小时无果 二分图匹配时间显然太大 但是有这个hall定理 二分图有完美匹配的充要条件是 对于左边任意一个集合(大小为|s|),其连边点构成的集合(大小为|s'|) 需满足(|s'|>=|s|) 正确性可能yy一下就可以出来 所以这道题 我们考虑一个连续区间 为什么要连续的呢? 如果选出的区间有不想交的部分 那么我们一定可以把它划分成两个部分 并且如果现在的问题无解这两个部分必然有一个无解 如果全部相连,中间有被包含的区间 那么我们加入它一定可以增强限制…
题目链接 只有指向父节点的单向道路,所以c个人肯定在LCA处汇合.那么就成了有c条到LCA的路径,求最大的x,满足能从c条路径中各选出x个数,且它们不同. 先要维护一条路径的数的种类数,可以树剖+每条链维护一个bitset解决.用vector一条链加一个bitset,SDOI R2现场测过我记得空间还不算特别大..当然本题数字只有1000种,一个点开一个bitset没问题.最后合并时还要通过线段树. 假设答案是x,那么c个人都要从可选特产中不重复地选x个,把每个人拆成x个点就是一个二分图完备匹配…