南京训练记录

5.8

Codeforces Round 872 (Div.1) A、B1、B2

枚举;猜结论!!!

5.9

Codeforces Round 872 (Div.1) C

利用 DP 数组值的性质进行优化;启发式合并;继承重儿子信息(dsu on tree 的思想)。

LOJ511「LibreOJ NOI Round #1」验题

和字典序相关的东西考虑 fix 一段前缀。

某些东西增长速度很快时考虑只取很少数量,数量过大直接不考虑。

独立集数量考虑把已经确定的点和它的连边全部删掉,然后方案数就是连通块方案数乘积。

CF346E Doodle Jump

缩小问题规模!!!减少无用状态!!!

5.10

朱富海教授数学课

讲代数。感觉像科普……

  • 三等分角。只有部分特殊角可以用尺规作图做到。
  • 画正 \(n\) 边形。实际上就是画角度的 \(\cos\)
  • 形如 \(2^{2^n}+1\) 的素数叫费马素数。边数为费马素数的正多边形可以尺规作图。
  • \(a^{2k+1}+1\) 因式分解。
  • 三、四次方程求根。\((p+q)^3=p^3+q^3+3pq(p+q)\)。设 \(x=p+1\),那么这个式子等价于 \(x^3-3pqx-(p^3+q^3)=0\)
  • 向量旋转。https://zhuanlan.zhihu.com/p/98007510
  • 尺规作图核心:交点。直直 \(\to\) 四则运算。直圆 \(\to\) 开方。
  • 研究数的域逐渐扩大:有理数 \(\to\) 无理数 \(\to\) 超越数和代数数。代数数:能表示为有理系数方程的根的数。

QOJ6322 The 1st Universal Cup. Stage 12: Ōokayama F. Forestry

套路题。但我还是不会。自闭。没有必要去 NOI 了。

第一步把求和转成期望最后再乘上总方案数,这就想不到。无语了。

\(dp_{u,x}\) 表示 \(u\) 的子树中,包含 \(u\) 的连通块的点权最小值为 \(x\) 的概率为多少。

转移合并子树。有 \(dp_{u,x}\times dp_{v,y}\to dp_{u,\min(x,y)}\),即 \(dp_{u,x}=dp_{v,x}\times\sum\limits_{i=x}^{10^9}dp_{u,i}+dp_{u,x}\times\sum\limits_{i=x+1}^{10^9}dp_{v,i}\)

可以线段树合并优化。具体来说就是区间维护概率和、期望和,以及区间内每个数要乘的概率 tag。

做完了!!!

5.11

发现大仙。参考题解。

https://www.cnblogs.com/znstz2018/p/17389780.html

https://www.cnblogs.com/cwhfy/p/17391630.html

QOJ5374 CTT2019 Day3T2 数圈

交换前缀和很牛逼。

类似 QOJ5096 2022-2023 集训队互测 Round 10 T2 千百 的套路,断环成无限长的链,考虑每两类之间要多少次交换,实际上就是 \(\lfloor\frac{|s_i-s_j|}{s_n}\rfloor-\Delta\),这个 \(\Delta\) 取决于原前缀和序列中两个位置的数是否形成顺序对。如果是就是 \(1\) 否则为 \(0\)

然后就是二维偏序的事了。

CF341E Candies Game

找到三个非零数 \(a_x\le a_y\le a_z\) 出来,然后设 \(t=\lfloor\frac{a_y}{a_x}\rfloor\),那么 \(a_y=ta_x+p\)。从低到高考虑 \(t\) 的每一个二进制位,为 \(1\) 就操作 \((x,y)\),否则操作 \((x,z)\),这样可以把 \(a_y\) 变成 \(p\)。可以证明这样做可以达到题目的要求。复杂度见洛谷 xzy 的题解。

Gym102412D The Jump from Height of Self-importance to Height of IQ Level

https://codeforces.com/gym/102412

平衡树维护区间经典操作,直接上 fhq-treap。

考虑要维护什么信息:

  • 区间大小、最大值、最小值。
  • 区间内是否已经有满足条件的三元组。
  • 区间内所有 \(i<j,a_i<a_j\) 的二元组中最小的 \(a_j\) 和最大的 \(a_i\)

第三条的 pushup 见 znstz 的题解。我就不细说了。

5.12

2023.5.12 考试 T1 生成树(count)

给定正整数 \(N\)\(M\),考虑构造一张 \(N+2\) 个点 \(2N+1\) 条边的连通无向图如下:

  • 图上的点从 \(0\)\(N + 1\) 编号。
  • 对于点 \(i\) 满足 \(0 \le i < N\),点 \(i\) 和点 \((i + 1)\bmod N\) 之间有边。
  • 对于点 \(i\) 满足 \(0 \le i < M\),点 \(i\) 和点 \(N\) 之间有边;对于点 \(i\) 满足 \(M \le i < N\),点 \(i\) 和点 \(N + 1\) 之间有边。
  • \(N\)\(N + 1\) 之间有边。

需要求出这张图的生成树个数,对 \(10^9 + 7\) 取模。

数据范围:\(3\le N\le 10^9\)\(1\le M\le N\)\(1\le T\le 2000\)

考虑 \(N\)\(N+1\) 这条边是否存在于最终的生成树上。

  • 若存在,则题目和 [FJOI2007] 轮状病毒 等价。递推式 \(f_n=3f_{n-1}-f_{n-2}+2\)
  • 若不存在,则考虑 \(0\)\(N-1\)\(M-1\)\(M\) 这两条边中有几条存在于最终的生成树上:
    • 若有一条,则两边的方案是等价的,也就是两边都要是一棵树。这个可以递推解决:设 \(f_i\) 表示 \(i\) 个点的方案数,那么转移有 \(f_i=\sum\limits_{j=0}^{i-1}f_j\times(i-j)\),可以多阶差分得到递推式。
    • 若有两条,则一边是树,另一边一定由两部分组成:一条链和一棵树。可以用同样的方式算出答案。

很厉害的题目。

2023.5.12 考试 T2 最大流(flow)

原题:https://vjudge.net/problem/CodeChef-PUSHFLOW

给定 \(N\) 个节点 \(M\) 条边的无向连通简单图,点从 \(1\)\(N\) 编号,边从 \(1\)\(M\) 编号。这张图中,任意一条边最多出现在一个简单环中。

每条边都有流量上限,其中第 \(i\) 条边的容量上限为 \(c_i\)。需要支持 \(Q\) 次以下操作:

  • 给定两个点 \(u\)\(v\),询问这两点间的最大流。
  • 给定一条边 \(e\) 和非负整数 \(d\),将 \(c_e\) 修改为 \(d\)

数据范围:\(1\le N\le 10^5\)\(1\le M,Q\le 2\times10^5\)。保证给定的图是连通的,且任意一条边最多出现在一个简单环中。

因为最大流等于最小割,所以如果图是一棵树就相当于要求修改边权、查询路径边权 \(\min\)。对于仙人掌,那么一个环的权值可以看成其经过的两条环上路径的权值 \(\min\) 之和。

显然建出圆方树。然后树剖。

考虑每次修改,如果是链上的边那么很好办,直接改就完事了。如果是环上的边,那么只需要改那个方点对应的重儿子的权值,因为轻儿子的权值可以在树剖查询时重新计算。因为每次查询轻边数量是 \(\mathcal{O}(\log n)\) 的,所以这样子复杂度是对的。Orz juju。

这种“延迟修改”的思想很妙啊。树剖常用套路。

重修 Matrix-Tree Theorem

http://oi-wiki.com/graph/matrix-tree/

5.13

重修线段树历史和

https://www.luogu.com.cn/blog/MuYC/xian-duan-shu-wei-hu-ou-jian-li-shi-ban-ben-hu

https://www.cnblogs.com/guangheli/p/13274276.html

5.14

https://www.cnblogs.com/Cry-For-theMoon/p/17369511.html

ABC301Ex Difference of Distance

答案显然 \(\in\{0,1\}\)

如果要修改的边的原来的权值 \(>d(s,t)\) 或者 \(<d(s,t)\),那么答案显然是 \(0\)。原来的 \(d(s,t)\) 可以 Kruskal 重构树求出来。或者如果我们只需要知道 \(d(s,t)\) 是否等于某个值可以用并查集。

那么只有当权值 \(=d(s,t)\) 时答案才有可能是 \(1\)

考虑先加入所有边权 \(<d(s,t)\) 的边,然后找到所有的连通块,将边权 \(=d(s,t)\) 的边加入,并求出其中所有的割边。那么当且仅当要修改的边是割边且在 \(s\to t\) 的路径上时答案为 \(1\),否则为 \(0\)

实现时可以按照边权扫描线。具体参考官方 std。

因为某些 shaber 错误而调了一年才调出来的代码:https://paste.ubuntu.com/p/nT4StgfJYj/

CF268D Wall Bars

DP。对状态数进行优化。很妙。

CF293E Close Vertices

点分治模板。双指针套一个 BIT 就行了。

ARC160 A~C

还是挺有技术含量的。

A 简单贪心,fix LCP。https://atcoder.jp/contests/arc160/submissions/41452562

B 简单整除分块 + 分类讨论,注意讨论清楚每部分的贡献要怎么算。https://atcoder.jp/contests/arc160/submissions/41452566

C 空间复杂度分析 + 前缀和优化 DP。这个状态数分析太妙了。暴力 DP 第二维的有值的位置的数量总共是 \(\mathcal{O}(n\log n)\)https://atcoder.jp/contests/arc160/submissions/41452572

5.15

2023.5.15 考试 T1 / ICPC 2019 NWRRC D. Double Palindrome

求长度小于等于 \(n\),由前 \(k\) 个小写字母组成的字符串中,满足双回文串定义的有多少个。对 \(998244353\) 取模。

双回文串:本身为回文串或者由两个回文串拼接成的字符串。

数据范围:\(1\le n\le 10^{10},1\le k<998244353\)

原题范围 \(n\le 2\times10^6\),可以考虑 \(\mathcal{O}(n\log n)\) 的做法。

一个比较清楚的题解:https://www.silllage.com/2019-icpc-nwrrc-d-double-palindrome/。很厉害的容斥。

https://www.luogu.com.cn/blog/Tony2/ruo-shuang-hui-wen-chuan-tong-ji

要优化可以杜教筛,核心还是一个整除分块类似的套路。卷来卷去还是没什么意思。

bf 代码:https://paste.ubuntu.com/p/xRPdYchxpr/

2023.5.15 考试 T2 / CSES1685 New Flight Routes

https://vjudge.csgrandeur.cn/problem/CSES-1685

给定一个有向图, \(n\) 个点 \(m\) 条边。求加入最少的边,使得整个图强连通。请输出最少加入的边数,并给出一种构造,多测。

数据范围:\(1\le \sum n,\sum m\le 10^6\)

Orz xhz。

显然要先缩点。

考虑两个点集 \(A,B\),分别表示入度为 \(0\) 的点集和出度为 \(0\) 的点集。显然答案为 \(\max(|A|,|B|)\)

接下来考虑构造,如果某一个点集较小那么就不断加入里面已经有的某个元素使得两个点集大小相等。

先把所有弱联通分量连成一个。然后进行 shuffle 随机匹配,再进行一遍 check。

当然也有正经做法:

随机的代码:https://paste.ubuntu.com/p/PqQZJ8GCtn/

ARC160E Make Biconnected

Orz ya。很清楚了。

https://www.cnblogs.com/Scintilla/p/17401478.html

按照 dfs 序前一半匹配后一半就是 \(1\)\(\frac{cnt}{2}+1\) 匹配,\(2\)\(\frac{cnt}{2}+2\) 匹配……证明可以考虑每条边其两端子树的叶子结点,一定有一端是连续 dfs 序的。

实现可以暴跳祖先 + set。

https://atcoder.jp/contests/arc160/submissions/41452546

5.16

CF269D Maximum Waterfall

按照高度扫描线。用 set 维护上轮廓线。然后就是 DAG 最小瓶颈路的 DP。

https://paste.ubuntu.com/p/mpSCDjPDP8/

ARC160D Mahjong

Orz ya。https://www.cnblogs.com/Scintilla/p/17401478.html

那个组合恒等式的意义就是,考虑总共有 \(a+b+1\) 个位置,要选择 \(c+d+1\) 个位置的方案数。可以枚举第 \(c+1\) 个位置在哪里。

https://atcoder.jp/contests/arc160/submissions/41453264

ARC160F Count Sorted Arrays

为啥感觉这根本不是人能想到的啊。。。

还是看 ya 的题解吧。

https://atcoder.jp/contests/arc160/submissions/41456556

5.17

QOJ6308 EC-Final 2022 K. Magic / 2023.5.17 考试 T2

https://qoj.ac/problem/6308

考虑贡献答案的意义。然后就相当于两个相交区间中间两个端点不能同时取到贡献。在它们之间连边,答案就是建出的图的最大独立集。显然这是二分图,然后就是 \(2n-\) 最大匹配。

bitset 优化 Dinic 卡空间!!!

https://www.cnblogs.com/znstz2018/p/17280982.html

https://paste.ubuntu.com/p/NYnTXpQ85X/

Open Cup 2020-2021, Stage 1: Grand Prix of Xiaomi A. Rikka with Game / 2023.5.17 考试 T1

posted @ 2023-05-09 22:37  csxsi  阅读(11)  评论(0)    收藏  举报