Graph Rush
都是冷门知识点,没用的。。
虚树
P4103 [HEOI2014]大工程
https://www.luogu.com.cn/problem/P4103
板子题。板子即可。
P4426 [HNOI/AHOI2018]毒瘤
https://www.luogu.com.cn/problem/P4426
待填 到时候问 lyc
分层图
诀窍: \(nK\) 很小。
P4822 [BJWC2012]冻结
https://www.luogu.com.cn/problem/P4822
显然
P3119 - [USACO15JAN]Grass Cownoisseur G
https://www.luogu.com.cn/problem/P3119
x -> y
x+n -> y+n
x -> y+n
矩阵加速图
https://www.luogu.com.cn/blog/xiaoziyaoxzy/ju-zhen-jia-su-tu-shang-wen-ti-xue-xi-bi-ji
矩阵 \(^k\) 第 \((i,j)\) 位置,代表 \(i\) 走 \(k\) 步数到达 \(j\) 的方案数。
P2151 - [SDOI2009]HH去散步
https://www.luogu.com.cn/problem/P2151
有一个限制是:不能走上一步走过的边。
考虑把边化成点。两个新点,有连边,当且仅当,第一个边的终点,连向,第二个边的起点。
比如一个图,原图为:1<-->2<-->3
。那么自己画一下就明白了。
那么限制就会让 \((x,y)\to (y,x),(y,x)\to (x,y)\) 的两条边删除。
然后裸奔矩阵加速图,即可(注意,由于点化边,所以 \(t\) 变成 \(t-1\)).
CF576D - Flights for Regular Customers
https://www.luogu.com.cn/problem/CF576D
首先对边排序,然后从小到大依次加入每条边。
考虑只有当前存在的边时,答案怎么求。
我们有一个 01 矩阵,代表 \(u\) 能否到达 \(v\)。
那么如果上一次的边时间为 \(t_0\),这一次要枚举边 \(t\)。那么就相当于将矩阵再做 \(t-t_0\) 次幂。
然后我们就知道哪些点可以到达了。
于是 bfs 求最短路,如果可以到达 \(n\),那么答案就是 \(t+d_n\)。
注意矩阵乘法要用 bItSeT 优化。
P2886 - [USACO07NOV]Cow Relays G
https://www.luogu.com.cn/problem/P2886
\(dis_{i,j}\) 为 \(i\) 到 \(j\) 最短路。
则 矩阵 \(^k\) 就是 \(i\) 到 \(j\) 转移 \(k\) 次的最短路。而这里的矩阵乘法为:
但是注意,我们每次只能转移一条边,所以枚举顺序为 i,j,k
。(而且 \(dis'\) 在当前轮不能用于更新)。
P6772 - [NOI2020] 美食家
https://www.luogu.com.cn/problem/P6772
无趣。
\(m\) 小 \(\to\) 暴力拆边。
最大值 \(\to\) \(dis'_{i,j}=\max(dis_{i,k}+dis_{k,j})\)。
额外愉悦值 \(\to\) 每次都只转移 \(t_i-t_{i-1}\) 的时间,然后创造一个新矩阵,它原本的 \(\Large a_{x_i}\) 变为 \(\Large a_{x_i}+y_i\) 这次转移乘上新矩阵。\(\to\) 二进制分组优化。
具体实现:
因为我们只用求 \(1\) 开始的路,所以 \(A_i\) 为一个 \(1\times n\) 的矩阵。动态乘就好了,这样乘一次的时间复杂度为 \(O(n^2)\)。
2 - SaT
念一遍: \(col_A>col_{\neg A}\) 则 \(A\) 为真。真的大才是大的真。
UPD:求 2-SAT 方案数是 「世界难题(maybe NPC)」!
闲着没事做做语文阅读理解:https://www.luogu.com.cn/training/20236#problems
AT2336 - [ARC069D] Flags
https://www.luogu.com.cn/problem/AT2336
二分+线段树优化建图。水题一个。
UPD:写假了!不能写动态开点,因为这样就会无法区分相同值的位置!比如:
2
1 2
2 3
然而 too lazy to modi
P6965 - [NEERC2016]Binary Code
https://www.luogu.com.cn/problem/P6965
把一个串的两种情况都插入到 AC 自动机中。
一个串的字典树(不是 fail 树)对应的结束节点,下面的点,都是它排斥的点。
然后暴力将字典树上的点串起来就好了?值得一写。
出题人没有把这个搬到 AC 自动机上,或者搬到 后缀自动机 上,或者搬到 仙人掌 上,真是 Too Young Too Simple。
CF1215F - Radio Stations
https://www.luogu.com.cn/problem/CF1215F
前缀优化建图。
最后一个条件相当于对于一个点 \(f\)(\(f\) 就是区间交点)
- 若 \([1,l_i-1]\) 有 \(f\) 则 \(i\) 不能选。
- 若 \([1,r_i]\) 没有 \(f\) 则 \(i\) 不能选。
然后搞就行了。
差分约束
你不记得了!
考虑若干限制 \(x_i-x_j\le c_k\),变形 \(x_i\le x_j+c_k\),相当于最短路(让 \(x_i\) 越小越好)。
还有,\(x_i-x_j\ge c_k\) 变形 \(x_i\ge x_j+c_k\),最长路。
所以连边 \(j\to i:c_k\) 即可。
同理地:
\(x_i-x_j\ge c_k\to x_j-x_i\le -c_k\);
\(x_i-x_j= c_k\to x_i -x_j \le c_k\ \and\ x_i-x_j\ge c_k\)。
\(x_i-x_j<c_k\to x_i-x_j\le c_k-1\)。
但是,如果图不连通怎么办。于是我们强制地新建一个 \(x_{n+1}\),向所有点连一个 0 边。硬点所有线性相关顺藤摸瓜到的生芽种子都相同(也就是说,如果 \(x_1\to x_2\to x_3,x_4\to x_5\),那就硬点 \(x_1=x_4\))。
判断负环:
SPFA 所有点入队 \(n\) 次后 break。如果还满足 \(dis_i\ge dis_j+w\) 即可以松弛,则有负环。
P2294 - [HNOI2005]狡猾的商人
https://www.luogu.com.cn/problem/P2294
化为前缀和,=
。
P2474 - [SCOI2008]天平
https://www.luogu.com.cn/problem/P2474
我感觉这不像是差分约束。。。
https://www.luogu.com.cn/blog/80049/solution-p2474
P4926 - [1007]倍杀测量者
https://www.luogu.com.cn/problem/P4926
除法转化成 \(\log\) 下的减法。
晚上做一下带权 Binary 和 CDQ 吧…………T T