计算折纸

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的更多相关文章

  1. 学习笔记--APIO 2018 二分专题 By wuvin

    前言: 在APIO 2018 Day2下午听wuvin讲二分,听了一上午的神仙,现在终于有可以听懂了. 专题: 平均边权最大 题目链接:https://www.questoj.cn/problem/3 ...

  2. 「BalkanOI 2018 Day1」Election

    「BalkanOI 2018 Day1」Election 记C为1,T为-1,\(sum[i]\)为\(i\)点的前缀和. 对于询问\([l,r]\),分两步计算答案. 要求所有点的\(sum[i]- ...

  3. 「BalkanOI 2018 Day1」Minmaxtree

    「BalkanOI 2018 Day1」Minmaxtree 每个点都有一个最大和最小权值的限制. 然后每一个权值的限制都必须要取到. 每个点显然可以直接让他取到最大或最小权值. 可以想到每个点匹配一 ...

  4. RxJava2.0学习笔记2 2018年7月3日 周二

    摘记: 1.map -- 转换  有些服务端的接口设计,会在返回的数据外层包裹一些额外信息,这些信息对于调试很有用,但本地显示是用不到的.使用 map() 可以把外层的格式剥掉,只留下本地会用到的核心 ...

  5. APIO 2018 游记

    上接CTSC 2018 游记 day1 早上大概八九点起来洗了个澡跑到隔壁寝发现 tj 还在??? 原来昨天晚上听错名字了... 下午一起去 wfj 王府井玩,陪李总逛逛奢侈品店... 走了两三个小时 ...

  6. 《从零开始学Swift》学习笔记http(Day1)——我的第一行Swift代码

    Swift 2.0学习笔记(Day1)——我的第一行Swift代码 原创文章,欢迎转载.转载请注明:关东升的博客 当第一次看到下面代码时我石化了,这些代码是什么东东?单词拼出来的? import Fo ...

  7. WC 2018/CTSC 2018/APIO 2018 游记

    (要写CTSC的时候才想起来没写WC2018,那就粗略回顾一下吧hhhhh) WC 2018(简略版): 大概和 一个宁夏和一个天津的大哥一个宿舍hhhh,字典序分宿舍真是奇妙. WC讲课真的不是人听 ...

  8. 论文笔记:2018 PRCV 顶会顶刊墙展

    Global Gated Mixture of Second-order Pooling for Imporving Deep Convolutional Neural Network(2018 NI ...

  9. BZOJ5465 : [APIO 2018] 选圆圈

    假设最大的圆半径为$R$,以$2R$为大小将地图划分为一个个格子,那么每个圆只需要检查圆心在附近$9$个格子内部的所有圆. 在当前圆的半径不足$\frac{R}{2}$时重构网格,那么最多重构$O(\ ...

随机推荐

  1. 比Android更深远的改变世界——谷歌开源人工智能系统TensorFlow文档中文版

    OpenStack中国社区编者按:开源无处不在,特别在基础创新领域,未来系统软件都会是开源为主流:2015年11月9日,Google于开源了其第二代人工智能系统Tensorflow,如同6年前同样开源 ...

  2. 洛谷 P3625 [APIO2009]采油区域【枚举】

    参考:https://blog.csdn.net/FAreStorm/article/details/49200383 没有技术含量但是难想难写,枚举情况图详见参考blog懒得画了 bzoj蜜汁TTT ...

  3. poj 3130 How I Mathematician Wonder What You Are! 【半平面交】

    求多边形的核,直接把所有边求半平面交判断有无即可 #include<iostream> #include<cstdio> #include<algorithm> # ...

  4. 洛谷P2082 区间覆盖(加强版)(珂朵莉树)

    传送门 虽然是黄题而且还是一波离散就能解决的东西 然而珂朵莉树还是很好用 相当于一开始区间全为0,然后每一次区间赋值,问最后总权值 珂朵莉树搞一搞就好了 //minamoto #include< ...

  5. APP支付宝登录第三方授权如何签约入口在哪里

    最近,公司项目要接入支付宝授权登录,第三方SDK接入过不少,一顿按照流程操作.到签约的步骤的时候就把我难住了,入口一直找不到.然后在文档中心搜索“支付宝登录签约”,找到一个申请地址.心想终于找到你了, ...

  6. YCOJ中国邮递员问题

    题目: Description 一个邮递员从邮局出发,需要去 n - 2个城市送信,送完信件以后回家. 邮局在城市 1,家在城市 n,任意两个城市之间都有道路,但是这些道路是单向,也就是说 a 到 b ...

  7. win10系统下使用EDGE浏览器找不到Report Builder 启动图标

    Win10系统下如果要使用Report Builder,可能存在EDGE浏览器或者Chrome找不到ReportBuilder的启动图标的情况,此时,应以管理员权限运行IE浏览器,即可看到图标.

  8. android:fillViewport="true"让ScrollView内的view强行match_parent

    当你想让一个高度值不足scrollview的子控件fillparent的时候,单独的定义android:layout_height="fill_parent"是不起作用的,必须加上 ...

  9. Android内存堆上限Android的缺省值是16M(某些机型是24M)

    转自: http://www.cnblogs.com/jacktu/archive/2010/12/30/1921475.html 大家都知道Android的上层应用是基于 Dalvik Virtua ...

  10. AJPFX总结final、finally、finallize的区别

    final.finally.finallize有何区别?    final表示一个修饰符,如果用它来修饰一个类,则该类是不能继承的:如果用它来修饰一个变量,则该变量一旦赋值之后就不能再修改:如果用它来 ...