各类算法
Master.Yi
学习他人,提升自己;
提升自己,帮助他人。
展开
-
一般图最大匹配(带花树算法)
强烈推荐2015年集训队论文中陈胤伯的《浅谈图的匹配算法及其应用》,里面对匹配的性质及各类匹配算法都有很清晰的讲解。以下的内容只是读完论文后我的一些体会。求最大匹配的过程就是在求一条从未匹配点出发走到另一个未匹配点,并且路径是匹配边与非匹配边交替的简单路径。在二分图中,根据dfs/bfs的过程,我们可以画出一棵交错树,树中的边匹配边与非匹配边交替:容易发现树中的白点都是被匹配边“拉入”树中...原创 2020-05-08 16:22:11 · 842 阅读 · 0 评论 -
《陈胤伯:浅谈图的匹配算法及其应用》阅读笔记
Dinic求最大匹配 O(mn)O(m\sqrt n)O(mn)二分图最大匹配关键点和关键边例题:LOJ#6033. 「雅礼集训 2017 Day2」棋盘游戏二分图最大独立集的基于最大匹配的O(m)O(m)O(m)构造方法二分图字典序最小完备匹配:一般图的最大匹配(带花树算法)...原创 2020-05-08 15:48:36 · 871 阅读 · 0 评论 -
BZOJ2616: SPOJ PERIODNI【笛卡尔树树形DP】
题目描述:N≤500,K≤500,h[i] ≤1000000,mod 109+7。题目分析:根据图形比较容易想到按照最小值划分区间,那么hminh_{min}hmin*n这一个矩形区域就由这个最小值控制,两边的比hminh_{min}hmin高的车显然不会互相影响,据此就可以想到一个根据最小值划分然后DP的做法。划分的过程就是笛卡尔树的形态,所以问题就变成了在笛卡尔树上DP,f[i]...原创 2019-10-15 22:31:24 · 393 阅读 · 0 评论 -
NOIP模拟赛20190928 T2 序列【序列->树 倍增】
题目描述:T2 序列题目分析:首先对这个题进行一个比较深入地思考(这一部分请读者自行完成)。然后你会发现这道题本质上就是拉出一个“连续上升子序列”。我们让iii指向右边第一个比它大的数jjj,稍作思考可以发现它构成了这样一个图:这是一个树的结构(森林),并且不会有这样的情况:对于第一问,只需要从r2r_2r2处开始向右跳,一直到r1r_1r1,中间经过的节点数就是不能取的点...原创 2019-10-14 19:35:46 · 265 阅读 · 1 评论 -
Codeforces 125E MST Company【k度最小生成树】
题目描述:n个点m条无向边,在点1的度数恰为k的限制下求任意一棵最小生成树,输出边的编号,无解输出-1。n<=5000,m<=100000题目分析:WQS二分。给每条与1相连的边加上mid的权值后做最小生成树,如果选出的1边恰为k条,则符合条件,实际总权值为现权-k*mid。此时选出的树一定是在k限制下的最小生成树。如果小于k条,则加权要减小,r=mid-1;否则 l=mid...原创 2019-08-27 11:50:21 · 321 阅读 · 0 评论 -
哈夫曼编码与哈夫曼树
哈夫曼树的本质就是在k进制下找非前缀总长最小编码,非前缀使得解码唯一,总长最小使储存和传输都更优。对每个信息节点都有一个出现次数作为权值,权值乘上长度就是它对编码总长的贡献,问题就是要使得所有权值乘上长度之和最小。每次取权值最小的k个点合并,把新点作为原点的父亲,新点权值为k个点的权值之和,然后剩下的n-k+1的节点再重复这个过程,最后节点到根的路径长度就是编码长度,这就是哈夫曼树的思想。更...原创 2019-06-01 17:21:03 · 411 阅读 · 0 评论 -
普通平衡树(Splay,无旋Treap)
#include <bits/stdc++.h>#define maxn 500005using namespace std;int n,sz,root,fa[maxn],val[maxn],ch[maxn][2],siz[maxn],cnt[maxn];inline bool isc(int x){return ch[fa[x]][1]==x;}inline void up...原创 2019-10-21 23:02:00 · 420 阅读 · 0 评论 -
【莫比乌斯反演总结】
f(n)表示某一范围内(x,y)=n的数对的数量,F(n)表示某一范围内n|(x,y)的数对的数量那么直接求f(n)并不是很好求,而F(n)求起来相对无脑一些,我们可以通过对F(n)进行莫比乌斯反演来求得f(n)线性筛μ模板:void Prime(int N){ mu[1]=1;int cnt=0; for(int i=2;i&amp;amp;amp;lt;=N;i++) { if(!v[i]) p...原创 2018-11-30 00:25:19 · 361 阅读 · 0 评论 -
最小树形图(朱刘算法)模板
学习一波朱刘算法:https://blog.csdn.net/txl199106/article/details/62045479附上蒟蒻自改代码,看起来比较简洁。。。#include<cstdio>#include<cstring>#define maxn 105#define maxm 10005int n,m,r,ans,INF=1e9;int...原创 2018-09-28 22:01:43 · 389 阅读 · 0 评论 -
【2-sat】 POJ3648 Wedding
WeddingUp to thirty couples will attend a wedding feast, at which they will be seated on either side of a long table. The bride and groom sit at one end, opposite each other, and the bride wears an ...原创 2018-09-09 15:58:42 · 329 阅读 · 0 评论 -
【kruskal算法】 苗条的生成树
问题 N: 【基础图论】苗条的生成树时间限制: 1 Sec 内存限制: 64 MB提交: 5 解决: 1[提交][状态][讨论版]题目描述给定一个带权无向图G,你可以按如下方法定义一棵生成树: 图 G 是一个顶点与边的集合 (V, E), V 表示顶点集合 {v1, v2, …, vn} , E 表示无向的边的集合 {e1, e2, …, em}. 每条边 e ∈ E原创 2016-10-27 14:13:37 · 1811 阅读 · 0 评论 -
【分治之二分答案】 衣服
(题目略)分析: 原则上讲,此题用一些硬解与高级数据结构都是会超时的(只要数据够强)。 所以这里要介绍一种方法------二分答案 使用此方法的前提就是答案满足单调性,即小了不行大了行(或大了不行小了行)。 显然,用二分答案的思想,l=1,r=max a[i]; 然后m=(l+r)/2;再判断用m分钟能否烘干所有衣服,若可以,则r=m(注意不是m-1,因为m-1可能原创 2016-11-05 23:57:44 · 841 阅读 · 0 评论