Skip to content

Commit

Permalink
3.25
Browse files Browse the repository at this point in the history
  • Loading branch information
dtcxzyw committed Mar 25, 2019
1 parent c327271 commit 4ba7a4b
Show file tree
Hide file tree
Showing 15 changed files with 719 additions and 20 deletions.
109 changes: 107 additions & 2 deletions Queue.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
- [ ] CF 427D
- [x] CF 126B
- [ ] 【GDOI2014】beyond
- [ ] bzoj3084
# Blossom Algorithm
- [ ] UVa 11439
- [x] UOJ#79. 一般图最大匹配
Expand Down Expand Up @@ -128,6 +129,7 @@
- [ ] [CTSC2006]歌唱王国
- [ ] [CTSC2010]性能优化
- [ ] LOJ#6261. 一个人的高三楼
- [ ] bzoj3605
# 后缀数组/后缀自动机/序列自动机
- [x] LOJ#111. 后缀排序
- [x] LOJ#2033. 「SDOI2016」生成魔咒
Expand All @@ -149,16 +151,29 @@
- [ ] 【bzoj 2555】SubString(SAM+LCT,做完加总结)
- [ ] UVA10829
- [ ] P5112 FZOUTSY
- [ ] bzoj3238
- [ ] bzoj2946
- [ ] bzoj4032
- [ ] bzoj4180
- [ ] bzoj4327
- [ ] bzoj4545
- [ ] bzoj4310
- [ ] bzoj3926
- [ ] bzoj4453
# AC自动机
- [x] LOJ#2180. 「BJOI2017」魔法咒语
- [ ] BZOJ2780: [Spoj]8093 Sevenk Love Oimaster
- [ ] bzoj3530
# KMP
- [ ] LOJ#2272. 「SDOI2017」文本校正
- [ ] CF25E Test
- [ ] bzoj1398
# 线性基
- [ ] LOJ#2312. 「HAOI2017」八纵八横
- [x] LOJ#114. k 大异或和
- [ ] LOJ#6243. 关灯问题
- [ ] bzoj4184
- [ ] bzoj4269
# dp优化
- [x] LOJ#535. 「LibreOJ Round #6」花火
- [x] LOJ#2074. 「JSOI2016」灯塔
Expand All @@ -179,6 +194,7 @@
- [x] [POI2011]Lightning Conductor
- [x] CF868F Yet Another Minimization Problem
- [ ] LOJ#6081. ZQC 的女装
- [ ] bzoj2739
# 斜率优化
- [x] [USACO08MAR]土地征用Land Acquisition
- [x] [HNOI2008]玩具装箱TOY
Expand All @@ -189,8 +205,11 @@
- [ ] [NOI2016]国王饮水记
- [ ] BZOJ1096 [ZJOI2007]仓库建设
- [ ] [SDOI2016]征途
- [ ] HDU5956The Elder
- [ ] HDU5956 The Elder
- [ ] P3994 Highway
- [ ] bzoj3675
- [ ] bzoj4367
- [ ] NOI2007货币兑换
# 凸优化(WQS二分、带权二分)
- [x] CF 739E
- [x] [国家集训队2]Tree I
Expand All @@ -202,6 +221,7 @@
- [x] P3572 [POI2014]PTA-Little Bird
- [x] P3594 [POI2015]WIL-Wilcze doły
- [x] [POI2010]KLO-Blocks
- [ ] bzoj2096
# LCT
- [x] LOJ#6038. 「雅礼集训 2017 Day5」远行
- [x] LOJ#558. 「Antileaf's Round」我们的 CPU 遭到攻击
Expand All @@ -221,8 +241,12 @@
- [ ] BZOJ 3514
- [ ] BZOJ 2555
- [ ] P2056 [ZJOI2007]捉迷藏
- [ ] bzoj2759
# 平衡树
- [x] LOJ#516. 「LibreOJ β Round #2」DP 一般看规律
- [ ] bzoj3545
- [ ] bzoj2733
- [ ] bzoj3551
# 容斥/反演/筛法/计数(顺便加入readme中常见套路)
- [x] LOJ#153. 集合覆盖计数
- [ ] LOJ#154. 集合划分计数
Expand Down Expand Up @@ -265,6 +289,18 @@
- [x] LOJ#6028. 「from CommonAnts」质数计数 II
- [x] LOJ#6235. 区间素数个数(AC还需要Meissel-Lehmer)
- [x] bzoj2440完全平方数
- [ ] bzoj3198
- [ ] bzoj4086
- [ ] bzoj4305
- [ ] bzoj2671
- [ ] bzoj2705
- [ ] bzoj3309
- [ ] bzoj3529
- [ ] bzoj3834
- [ ] bzoj3994
- [ ] bzoj4407
- [ ] bzoj2813
- [ ] bzoj4428
# 扩展欧几里得
- [ ] LOJ#6440
- [ ] CF868G
Expand Down Expand Up @@ -294,8 +330,27 @@
- [ ] bzoj3218: a + b Problem
- [ ] bzoj3681 Arietta
- [ ] Cf172 k-Maximum Subsequence Sum
- [x] POJ3469 Dual Core CPU
- [ ] bzoj2163
- [ ] bzoj3716
- [ ] bzoj4435
- [ ] bzoj4439
- [ ] bzoj4599
- [ ] bzoj1532
- [ ] bzoj2864
- [ ] bzoj3993
- [ ] bzoj1061
- [ ] bzoj1070
- [ ] bzoj1877
- [ ] bzoj2288
- [ ] bzoj2661
- [ ] bzoj4514
- [ ] bzoj2229
- [ ] bzoj3532
# 分块及按大小分类
- [x] LOJ#6277-6285
- [ ] bzoj2741
- [ ] bzoj3463
# 插头dp
- [x] P5056 【模板】插头dp
- [x] [JLOI2009]神秘的生物
Expand All @@ -312,11 +367,17 @@
- [ ] LOJ#2056. 「TJOI / HEOI2016」序列
- [x] Luogu P3206
- [ ] bzoj2989 数列
- [ ] bzoj2141
- [ ] bzoj2961
- [ ] bzoj3236
- [ ] bzoj3295
- [ ] bzoj3672
# 2-SAT
- [ ] LOJ#571. 「LibreOJ Round #11」Misaka Network 与 Accelerator
- [ ] LOJ#2155. 「POI2011 R1」同谋者 Conspiracy
- [ ] LOJ#6036. 「雅礼集训 2017 Day4」编码
- [ ] LOJ#6157. A ^ B Problem
- [ ] bzoj3495
# 点分治
- [x] LOJ#2179. 「BJOI2017」树的难题
- [x] LOJ#2259. 「FJOI2014」最短路径树问题
Expand All @@ -337,30 +398,51 @@
- [x] P4292
- [x] P2056 [ZJOI2007]捉迷藏
- [ ] Tree Query(http://codeforces.com/gym/100570/problem/F)
- [ ] bzoj2051
- [ ] bzoj4543
- [ ] bzoj4598
# 虚树
- [x] LOJ#2206. 「HNOI2014」世界树
- [x] LOJ#2219. 「HEOI2014」大工程
- [x] CF 613D
- [ ] UOJ#87. mx的仙人掌
- [ ] bzoj3589
# kdtree
- [x] LOJ#6016. 崂山白花蛇草水
- [ ] P4357 [CQOI2016]K远点对
- [ ] bzoj2378
- [ ] bzoj2626
- [ ] bzoj2648
- [ ] bzoj2850
- [ ] bzoj3616
- [ ] bzoj3815
- [ ] bzoj4066
- [ ]
# 计算几何
- [ ] P4586
- [ ] bzoj2961
- [ ] bzoj2642
- [ ] bzoj3199
# 树的直径
- [ ] P2195
- [ ] P3629
- [ ] P3761
- [ ] P4383
# 左偏树
- [ ] P2483
- [ ] bzoj2809
- [ ] bzoj2089
# 数论
- [x] PE484
- [x] LOJ6053
- [x] PE639
- [ ] LOJ#6542. 离散对数
- [ ] P3169 [CQOI2015]多项式
- [ ] Loj #6019. 「from CommonAnts」寻找 LCM
- [ ] bzoj3501
- [ ] bzoj1902
- [ ] bzoj2111
- [ ] bzoj4454
# 线段树相关
- [x] LOJ#2013. 「SCOI2016」幸运数字
- [x] LOJ#6057. 「HNOI2016」序列 数据加强版
Expand Down Expand Up @@ -391,23 +473,36 @@
- [x] LOJ2032 [SDOI2016]游戏
- [ ] BZOJ4700: 适者
- [x] 「Heoi2013」Segment
- [ ] bzoj1568
- [ ] bzoj4515
- [ ] bzoj3585
# 分治
- [x] UVA1608 Non-boring sequences
- [x] P4755 Beautiful Pair
- [x] LOJ#6198. 谢特(height数组+启发式分治+可持久化Trie)
- [ ] [NWERC2017]Factor-Free Tree
- [ ] bzoj2458
- [ ] bzoj3745
- [ ] bzoj3984
- [ ] bzoj4184
- [ ] bzoj4311
- [ ] bzoj4456
# BM 算法
- [ ] LOJ#2981. 「THUSCH 2017」如果奇迹有颜色
# 概率期望
- [ ] LOJ#2267. 「SDOI2017」龙与地下城
- [ ] bzoj3534
- [ ] bzoj3811
# 构造
- [ ] LOJ Round#11 Misaka Network
- [ ] LOJ Beta Round #3 绯色IOI
- [ ] UOJ Goodbye Wuxu 新年的拯救计划
- [ ] CF1060H Sophisticated Device
- [ ] CF522 Negative Time Summation
- [ ] LOJ#544. 「LibreOJ β Round #7」Array Poisonous Suffix Problem
- [ ] #525. 「LibreOJ β Round #4」多项式
- [ ] LOJ#525. 「LibreOJ β Round #4」多项式
- [ ] bzoj4148
- [ ] bzoj4319
# dp
- [ ] POI2012 SZA-Cloakroom
- [ ] CF938F
Expand All @@ -427,6 +522,7 @@
- [ ] LOJ#2528. 「ZJOI2018」树
# 支配树
- [x] Luogu 2597 ZJOI 灾难
- [ ] bzoj2851
# DSU On Tree
- [ ] CF600E
- [ ] CF570D
Expand All @@ -443,6 +539,8 @@
- [ ] LOJ#2734. 「JOISC 2016 Day 2」女装大佬 (FJWC2019上厕所)
# 整体二分
- [ ] CF603E Pastoral Oddities
- [ ] bzoj2527
- [ ] bzoj2738
# 博弈论
- [ ] LOJ#524. 「LibreOJ β Round #4」游戏
- [ ] LOJ#531. 「LibreOJ β Round #5」游戏
Expand All @@ -467,6 +565,7 @@
# 二进制分组
- [ ] CF710F String Set Queries
- [ ] bzoj2989 数列
- [ ] bzoj4140
# 矩阵快速幂
- [ ] [JLOI2015]有意义的字符串
- [ ] [HNOI2011]数学作业
Expand All @@ -478,8 +577,14 @@
- [ ] 「BZOJ 3680」吊打 XXX
- [ ] 「JSOI 2016」炸弹攻击
- [ ] 「HAOI 2006」均分数据
- [ ] bzoj2336
# 交互题
- [ ] 「APIO2017」考拉的游戏
- [ ] 「WC2019」I 君的商店
- [ ] 「APIO2016」最大差分
- [ ] 「WC2018」即时战略
# 线性代数
- [ ] bzoj3603
- [ ] bzoj4128
# 并查集
- [ ] bzoj2054
11 changes: 8 additions & 3 deletions Review/DP/Dynamic.tex
Original file line number Diff line number Diff line change
Expand Up @@ -52,17 +52,17 @@ \subsubsection{描述dp转移}
\paragraph{注意事项}
\begin{itemize}
\item 「NOIP2018」保卫王国:构造出矩阵后转移矩阵内一定有一列与向量的表示相同,
取dp值时从这里取。
取dp值时从这里取。更准确地说,要乘上末尾的哨兵向量观察取值。
\item 「SDOI2017」切树游戏:在构造矩阵时不要吝啬矩阵大小,可以加入一些常量辅助
转移,然后模拟两矩阵相乘,找出不变量并消去(尤其是常量所在位置),以节省时间和空间。
转移,然后模拟多次矩阵相乘,找出不变量并省略(尤其是常量所在位置),以节省时间和空间。
\end{itemize}

\subsubsection{修改与查询}
暴力算法每一次都要维护从修改点到根的点权,转化为矩阵乘法后也不例外。
考虑对整棵树进行树链剖分,暴力跳重链维护轻儿子对父亲的贡献,查询时线段树
查询区间矩阵乘积,把自己所在重链的后代的贡献施加到自身矩阵,计算出真实的转移矩阵。
注意跳重链时根据树链剖分的性质,该操作不超过$O(\lg n)$次,因此每次修改的复杂度
$O(\lg^2 n)$查询时间复杂度$O(m\lg^2n)$
$O(\lg^2 n)$

代码如下:
\lstinputlisting{Source/Templates/TDDP.cpp}
Expand Down Expand Up @@ -109,3 +109,8 @@ \subsection{全局平衡二叉树}
题解 P4643 【【模板】动态dp】 - 某菜鸡的blog\\
\url{https://www.luogu.org/blog/ShadowassIIXVIIIIV/solution-p4643}
}。

如果需要向bzoj4712 洪水那样查询某个子树内的dp值,不能直接使用子树根节点的信息。
因为整条链是一棵二叉树,这个根节点的矩阵积还包括其左儿子的贡献,但这一部分并不是
它的子树。实际答案应该为左偏链(儿子都是其父亲的左儿子)上节点的自身矩阵与其右儿子
矩阵的乘积。
16 changes: 16 additions & 0 deletions Review/NetworkFlows/Models.tex
Original file line number Diff line number Diff line change
Expand Up @@ -95,3 +95,19 @@ \subsection{区间k覆盖问题}
$S$的流量限制保证了集合个数最多为$k$,每个区间的连边保证了同一条增广路内选择的区间不相交。

如果某些区间左端点相同且互斥,则从左端点拆出一条容量为1的边限制选择。
\subsection{集合划分问题}
例题:POJ3469 Dual Core CPU

$n$个元素划分为2个集合,划分到$A$集合代价为$a_i$,划分到$B$集合代价为$b_i$,特别地
还有$m$个二元组$(x_i,y_i)$,若元素$x_i$$y_i$不在同一个集合内,要额外付出代价$c_i$
求最小代价。

首先考虑没有额外代价如何建图。为了求最小代价,要往最小割的方向思考。那么可以给每个元素建点,
$S$$i$连流量$a_i$,从$i$$T$连流量$b_i$,求出最小割后就在每个元素的$AB$选项中做出了选择。

现在要加入额外代价,即当$x_i$$y_i$在不同集合时,要让$S$$T$仍然存在增广路,可以发现
$x_i$$y_i$连双向流量$c_i$可以使其需要额外割掉这条边,同时当$x_i$$y_i$在同一个集合
时这条边没有任何影响,且不会导致某个点两个集合都选择。

变形:若在同一个集合内还要付出代价$d_i$\CJKsout{(资源竞争)},目前想到的方法是假设已付出
所有$d_i$,然后按照上文建图做MCMF。
2 changes: 1 addition & 1 deletion Review/NumberTheory/DiscreteLogarithm.tex
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ \subsection{Pollard rho算法}
Pollard's rho algorithm for logarithms
\url{https://en.wikipedia.org/wiki/Pollard's\_rho\_algorithm\_for\_logarithms}
}。
\subsection{Pohlig–Hellman算法}
\subsection{Pohlig–Hellman算法}\label{PHDL}
\index{P!Pohlig–Hellman Algorithm}
该算法的思路基于群论,需要知道循环群的阶。如果循环群的阶是一个smooth number,即可以
分解为小素数幂之积,就能够将其分解为小规模的子问题。如果模数有原根,就可以沿用上面的做法。
Expand Down
1 change: 1 addition & 0 deletions Review/Recommendation.tex
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ \section{好用的网站/工具}
\url{http://ruanx.pw/bzojch/bzojno.html}
\item 马同学高等数学 \url{https://www.matongxue.com/}
\item 某OJ \url{https://csacademy.com}
\item BZOJ题目一句话题解整理 By CreationAugust\url{https://blog.csdn.net/creationaugust/article/details/51387623}
\end{itemize}
\section{优秀资料}
\begin{itemize}
Expand Down
24 changes: 24 additions & 0 deletions Review/SetAndGroupTheory/PermutationGroups.tex
Original file line number Diff line number Diff line change
Expand Up @@ -177,4 +177,28 @@ \subsection{置换的群性质}
\begin{itemize}
\item 置换快速幂
\item 置换BSGS求离散对数
\item 置换同余方程组
\end{itemize}

\index{*TODO!置换的群性质结合数论的应用。}

例题:FCS2019 Day6 blue

给定一个操作$f(S)$,这个操作每次将串$S$循环左移$a$位,再对串的每个字母做$b$次置换。
$S$至少做多少次操作才能变成$T$,或者无法变成$T$

首先$b$次置换可以使用置换快速幂变为1次置换。

我原先的做法:求出置换和循环左移的循环长度,然后暴力。

注意到$f(S)$是双射,也有逆变换,因此可以将题目表示为求离散对数$f^x(S)=T$,然后
转换为BSGS解决。当然还要提前计算出$f(S)$的周期,然后就可以将复杂度中周期的因子降为根号。

$f(S)$由多个子置换组成,它的生成群的阶是这些子置换循环长度的lcm。这说明这个置换可以
分解为子问题解决,类似于~\ref{PHDL}节所述的Pohlig–Hellman算法。考虑枚举$S$$T$
起始位置之差,这个时候$S$$T$对应位置的字母是匹配的。要求对应字母在同一个环内且同环
字母对的环上位置差相同。暴力枚举起始位置匹配不可行,考虑将约束表达为字符串然后做KMP。
一个关键字是环id,另一个关键字是自身与串前面的同环字母的位置差(考虑$S$有同环位置$a,b$
$T$有同环位置$c,d$$a-c=b-d\Rightarrow b-a=d-c$)。使用KMP求出所有匹配位置,
同时记录已匹配串的环上位置差。记起始位置差为$A$,环上位置差为$B_i$,环长为$C_i$
可以将原问题表示为$ax\equiv A\pmod{n},bx\equiv B_i\pmod{C_i}$,使用ExCRT解决。
2 changes: 1 addition & 1 deletion Source/Competition/FCS2019/Day5/tableC.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ int DFS(int u, int f) {
if(u == T || f == 0)
return f;
int res = 0, k;
for(int i = last[u]; i; i = E[i].nxt) {
for(int& i = now[u]; i; i = E[i].nxt) {
int v = E[i].to;
if(d[u] == d[v] + 1 &&
(k = DFS(v, std::min(f, E[i].f)))) {
Expand Down
3 changes: 2 additions & 1 deletion Source/Competition/FCS2019/Day6/blue.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,8 @@ int main() {
a %= n;
long long end = n / gcd(a, n);
int c = calcCycle(trans);
end = std::max(end * c, 1LL);
end = std::max(end / gcd(end, c) * c, 1LL);
fprintf(stderr, "%lld\n", end);
for(int i = 1; i <= end; ++i) {
if(perform(F, G, n, a, trans)) {
printf("%d\n", i);
Expand Down
Loading

0 comments on commit 4ba7a4b

Please sign in to comment.