[笔记] APIO 2018 Day1
计算折纸
computaional origami
全息算法(???)
margulis napkin problem
素数里有任意长的等差数列
xor gate Σxi
or gate(exact version) 1-π(1-xi)
or gate(approximate versiton) :Randomly pick r1,r2,…,rn, calc Σrixi
correct with probability 1/2·
AC0电路
泊松算法
二分
两个长度为n的数组a,b,求ai*bj中第k小的数
排序a,b,二分第k个数的数值x,统计比x小的数个数
双指针扫描
2n-1宽的金字塔,除底层外每个位置是下面三个数的中位数,求塔顶数是多少
二分顶端数,转换为01序列
长度为n的序列,每个数在[1,n],m次操作,将一个区间升序排序,最后询问一次第x个数
二分,转换01序列
线段树,区间赋值,区间查询
n点,m边,有向图,每条边边权wi,求一个环使环上平均边权最大
二分平均值,边减去平均值,spfa判正环
n点m边,子图优美度=边数/点数,求最大优美程度
二分,最大权闭合子图
带权二分
解决带k限制的东西(如某东西只能用k次)
n点,m边,无向带权联通图,黑边或白边,求一颗最小权的恰有k条白色边的生成树
n<=50000,m<=100000,所有数据边权为[1,100]的正整数
对白边增加INF,最小生成树会得到一个白色尽量少树,对白边减去INF,得到白色边尽量多的树,
因此,有单调性。
给白色边增加C,C∈[-M*MaxW,M*MaxW]
如果某个c下,刚好得到k条边,就是最优解。
(注意c增加,白色边数单调不增,如555533310)
将长度为n的非负序列分割为k+l个非空子序列,每次ans+=两个序列中元素和的乘积
[APIO2014][SDOI2016]
1. O(nk) 斜率优化
2. 给每次划分加上代价c,当C=inf,只分一段,当c=0,分n段
所以有单调性,分段随c的增加而减少
Ans=Σxi^2-(每一段内任意两个数两两权值乘积)
然后斜率DP
O(nlogV)
n点树,有边权,用不超过k条边不相交的链覆盖,最小化未覆盖边长度之和+使用的链的条数*D
判断不限次数,额外代价为D时最优解的段数是否超过K,如果没有的话得到最优解。
否则,D的设置形同虚设,因为我们一定有k段。
然后就变成一个简单的二分+树上DP了
图的匹配及应用
kiana810@126.com
清华大学 何昊天
匹配中的边称为匹配边,其他为非匹配边
和匹配边相邻的为匹配点,其余为非匹配点
二分图用网络流+超级源汇解决
一般图做不到,原因:存在奇环
交错路:给出一个图和一个匹配,匹配边和非匹配边相错的路径
性质:把其中的匹配边和非匹配边取反,仍是合法匹配
增广路:两个端点都是未匹配点的交错路
取反后匹配边+1
匹配数=匹配点数/2
增广路定理:给定图和匹配,若不存在增广路,则该匹配就是极大匹配
选择公理(?)
拟阵(证明克鲁斯卡尔,证明增广路定理)
图论证法:
增广路引理:给定一张图和一个匹配,从一个未匹配点出发找不到增广路,则原图一定存在一个最大匹配,使得其不包含这个点,换句话说,我们删去这个点依然能找到原图的一个最大匹配
证明:匹配为M,存在一个未匹配点u,从u出发找不到增广路,该图有一个最大匹配M’
若u不是M’匹配点,得证
若u是M’匹配点,则构造另一个最大匹配使得u不是匹配点
对称差:(A△B=(A∪B)-(A∩B))
考虑M和M’的对称差N,这不一定是匹配,但其中仅有M的匹配边和M’中的匹配边和无关边
假设u在M中不是匹配点,所以u在N中仍然保留了在M’的匹配边,假设匹配边另一端是v1
显然v1不可能和M’中其他的匹配边相邻,但是可能和M中的匹配边相邻,假如有这样的边,假设另一端为v2
以此类推,直到走到vk,使vk除了与vk-1通过匹配边相邻外,其余邻边都是无关的边
刚才的路径不可能重复经过一个节点vi两次(否则vi在某个匹配中一定有两条边,不可能)
其次,vk!=u,否则u不是M中的未匹配点
最后vk与vk-1之间的边一定是M中的匹配边,否则u到vk就有一条M中的增广路,矛盾
现在在M’中取反u到vk,注意到这是一条交错路,所以仍然是一个匹配
增广路定理的证明:
假设图中无增广路,则从任意未匹配点出发都找不到增广路,任选一个未匹配点,删去后仍然得到原图最大匹配,删完后原匹配仍是原匹配。递归使用增广路引理,得证。
==注意到这里没有使用二分图的性质,所以对一般图仍然成立==
对于一张二分图,枚举一个集合中的每个未匹配点,直接从未匹配点开始进行DFS,如果走到另一个集合中的未匹配点,说明发现增广路,直接取反,否则通过匹配边走回原集合
根据距离定义搜索树上距离根节点的点为偶点或奇点
对于一般图:
1. 偶点到奇点都是匹配边
2. 奇点到偶点是匹配边
3. 偶点到偶点是匹配边
4. 不存在奇点到奇点的边,否则不形成交错路
偶点到偶点的边,会在搜索树上形成一个环,而且一旦穿越这条边,绕过一圈后环上的奇点都能成为偶点,那么它们将来可能延伸出更多交错路
一般图的花:
花(Blossom):搜索树上两条分叉的交错路通过偶点与偶点之间的边连成的奇数条边的环
花的问题在于,上面所有点都可以成为偶点,所以可以把花直接缩为一个偶点,称为缩花/开花(Blossom Contraction),这样搜索树的结构会更加清晰
在更复杂的图上花之间会有重叠,可谓百花齐放(笑),但注意我们的目的是化简搜索树找出增广路,所以缩花的顺序不影响,我们可以按任意顺序缩花。
实际操作中,只要遇到偶点到偶点的边马上缩花。
考虑缩花的次数,由于花上至少有三个点(奇环),所以每次缩花都会减少两个点,O(v)次缩花即可。
一般图的最大匹配
1. 从零开始枚举每个未匹配点
2. 对于一个未匹配点,按图的遍历走到另一个未访问的点x。若x是未匹配点,则已找到增广路,取反即可,否则继续拓展,走到对应的那个点,继续遍历
3. 走到访问过的奇点,直接返回
4. 略
缩花算法
花托(base):花上两条非匹配边衔接的点
形成花后,找到花托(即两个偶点在搜索树上的LCA)然后将花上的点全部缩为偶点,用并查集完成。
由于缩的点不再出现,对一棵搜索树的所有缩花操作,找花托O(V),最多O(V)次,瓶颈仍在遍历图O(E)上,再加上并查集的复杂度
以上为 带花树算法(Blossom Algorithm) O(VEα(V))
考虑优化,多路增广
对于二分图:
1. 从零匹配开始
2. 以一个集合的所有未匹配点为根,BFS建立搜索森林,每次拓展一层,找目前最短的增广路
3. 对弈另一个集合中的未匹配点,如果是搜索森林的叶子节点,则DFS返回具体增广路并取反,O(E)
4. 上述过程最多进行O(sqrt(V))轮
在前sqrt(V)轮,每一轮都找到并增广了最短的增广路,所以长度一定单调递增,那么这sqrt(V)轮后,剩余最短增广路长度最小sqrt(V)
考虑对称差
每进行一轮,最大匹配数最小增加1,所以再多执行sqrt(V)轮,就得到了最大匹配。
总复杂度O(Esqrt(V)) 这就是二分图匹配的Hopcroft-Karp算法
也就是对二分图用dinic的过程
对于一般图,用Micali-Vazirani算法多路增广达到O(Esqrt(V))
Konig定理:二分图最小点覆盖=最大匹配
证明:每条匹配边要选一个端点完成覆盖,所以最小点覆盖数不小于最大匹配数
接下来构造一个点覆盖数恰好等于最大匹配数的点覆盖:给未匹配点打标记,左侧标记点和右侧未标记点都是匹配点,所以C的大小恰好为最大匹配数
如果有边u-v未被覆盖,则u被标记v未被标记
如果u-v是匹配边,从u出发一定标记v,否则u-v是匹配边,当v匹配才可以
graph LR
A-->B
B-->G
G-->C
I-->D
D-->G
D-->H
H-->B
B-->E
B-->F
最大独立集定理:最小点覆盖数+最大独立集数=二分图定点数
在点覆盖的补集中,任意两个点之间不可能有边,否则不是匹配
三分图
**三分图**G=(V,E),V可以被划分为V1,V2,V3,满足三者∪为全集,∩为∅
两个三元组的交代表他们边集的交
如果两个三元组有交且不全等,则称这两个三元组相邻,与三元组 <u,v,w>
相邻的三元组数成为该三元组的度
记录o为G所有三元组集合,一个匹配M是o的一个子集,且满足M中不存在两个相交的三元组
o的连通子集称为三元组系列
对于G的两个匹配M和M’,Σ称为(M,M’)的交错三元组系列
如果还有{r|r∈Σ∩M}的大小等于{r|r∈Σ∩M’},则称Σ为增广三元组系列
增广路定理:M为G的最大(三分图)匹配的充要条件是G中不存在增广路
可以拓展到任意维度
拉格朗日松弛
[笔记] APIO 2018 Day1的更多相关文章
- 学习笔记--APIO 2018 二分专题 By wuvin
前言: 在APIO 2018 Day2下午听wuvin讲二分,听了一上午的神仙,现在终于有可以听懂了. 专题: 平均边权最大 题目链接:https://www.questoj.cn/problem/3 ...
- 「BalkanOI 2018 Day1」Election
「BalkanOI 2018 Day1」Election 记C为1,T为-1,\(sum[i]\)为\(i\)点的前缀和. 对于询问\([l,r]\),分两步计算答案. 要求所有点的\(sum[i]- ...
- 「BalkanOI 2018 Day1」Minmaxtree
「BalkanOI 2018 Day1」Minmaxtree 每个点都有一个最大和最小权值的限制. 然后每一个权值的限制都必须要取到. 每个点显然可以直接让他取到最大或最小权值. 可以想到每个点匹配一 ...
- RxJava2.0学习笔记2 2018年7月3日 周二
摘记: 1.map -- 转换 有些服务端的接口设计,会在返回的数据外层包裹一些额外信息,这些信息对于调试很有用,但本地显示是用不到的.使用 map() 可以把外层的格式剥掉,只留下本地会用到的核心 ...
- APIO 2018 游记
上接CTSC 2018 游记 day1 早上大概八九点起来洗了个澡跑到隔壁寝发现 tj 还在??? 原来昨天晚上听错名字了... 下午一起去 wfj 王府井玩,陪李总逛逛奢侈品店... 走了两三个小时 ...
- 《从零开始学Swift》学习笔记http(Day1)——我的第一行Swift代码
Swift 2.0学习笔记(Day1)——我的第一行Swift代码 原创文章,欢迎转载.转载请注明:关东升的博客 当第一次看到下面代码时我石化了,这些代码是什么东东?单词拼出来的? import Fo ...
- WC 2018/CTSC 2018/APIO 2018 游记
(要写CTSC的时候才想起来没写WC2018,那就粗略回顾一下吧hhhhh) WC 2018(简略版): 大概和 一个宁夏和一个天津的大哥一个宿舍hhhh,字典序分宿舍真是奇妙. WC讲课真的不是人听 ...
- 论文笔记:2018 PRCV 顶会顶刊墙展
Global Gated Mixture of Second-order Pooling for Imporving Deep Convolutional Neural Network(2018 NI ...
- BZOJ5465 : [APIO 2018] 选圆圈
假设最大的圆半径为$R$,以$2R$为大小将地图划分为一个个格子,那么每个圆只需要检查圆心在附近$9$个格子内部的所有圆. 在当前圆的半径不足$\frac{R}{2}$时重构网格,那么最多重构$O(\ ...
随机推荐
- node 中mongoose使用validate和密码加密的问题
在今天一直被一个问题困扰,就算是使用mongoose的alidate的时候想要限制密码的位数,比如不能少于几位,但是一直出错. 最后发现原来使用validate的时候,是在数据将要存入数据库的时候,因 ...
- Pascal学生管理
program Project2; {$APPTYPE CONSOLE} uses SysUtils; ;M=; type date=record day:..; month:..; year:..; ...
- E20180128-hm
paradigm n. 范例,样式,模范; 词形变化表; outlet n. 出口,出路; 批发商店; 排水口,通风口; 发泄(情感)的方法;
- bzoj 1096: [ZJOI2007]仓库建设【斜率优化】
好眼熟啊 直接dp显然很难算,所以设val为只在n点建一个仓库的费用,然后设f[i]为在i~n点建若干仓库并且i点一定建一个仓库的最大省钱数 转移很显然,设s为p的前缀和,f[i]=max{f[j]+ ...
- APP支付宝登录第三方授权如何签约入口在哪里
最近,公司项目要接入支付宝授权登录,第三方SDK接入过不少,一顿按照流程操作.到签约的步骤的时候就把我难住了,入口一直找不到.然后在文档中心搜索“支付宝登录签约”,找到一个申请地址.心想终于找到你了, ...
- (矩阵快速幂)51NOD 1242斐波那契数列的第N项
斐波那契数列的定义如下: F(0) = 0 F(1) = 1 F(n) = F(n - 1) + F(n - 2) (n >= 2) (1, 1, 2, 3, 5, 8, 13, 21, ...
- Workflow 规则大全 最新版
对于怎么操作Workflow我就不重复说明了 大家可以搜索我的另一条微博.Workflow,作为一款提高效率的软件,我觉得很有必要进行推广,当然我比较需要这里面的很多规则,先为己再为公.首先我只是出 ...
- ROS学习笔记二:ROS系统架构及概念
本文主要是了解ROS的系统架构.文件夹结构以及工作所需的核心文件. ROS系统架构主要被设计和划分为三部分,每一部分代表一个层级的概念:文件系统级(The filesystem level).计算图级 ...
- how-to-fix-fs-re-evaluating-native-module-sources-is-not-supported-graceful
http://stackoverflow.com/questions/37346512/how-to-fix-fs-re-evaluating-native-module-sources-is-not ...
- 206 Reverse Linked List 反转链表
反转一个单链表.进阶:链表可以迭代或递归地反转.你能否两个都实现一遍?详见:https://leetcode.com/problems/reverse-linked-list/description/ ...