【题解】Solution Set - NOIP2024集训Day53 图论杂题2
【题解】Solution Set - NOIP2024集训Day53 图论杂题2
https://www.becoder.com.cn/contest/5628
之前写的因为重装系统被清了,部分题目后面重写了一遍就比较简略。
「BZOJ4144」Petrol
和 「CF1253F」Cheap Robot 完全一样,只是需要特判一下不联通。
「AMPPZ2013」Bytehattan
注意:题目删的是双向边。
对偶图。
如果不连通,就是以 \((a,b)\) 作为源点/汇点,存在一个割,等价于在对偶图上存在一个环。
删去一条边,就是说我们可以割掉这条边,于是在对偶图上加上对应边,然后判是否能构成环就行了。
「CCO 2021」商旅(Travelling Merchant)
做过。
考虑一个 dp。
首先排除所有出度为 \(0\) 的点,其一定无解;否则一定可以有解。
想办法避免 dp 的后效性。
我们的目标其实就是想办法去掉里面的 \(\max\)。
根据一些性质分析。
注意到,性质 1:一条边的 \(r\) 如果是最大的话,她对 \(u\) 的贡献只能是 \(r\)(因为只要从这里走出去就畅通无阻了)。贡献后直接删除。
这个时候,我们可能产生一些没有出度的点,其答案一定是确定了,那么删掉她并用其去更新其前驱。
此时,所有的点都是有出度的了。
所以,刚才的性质 1 依旧适用,所以我们每次取 \(r\) 最大的边来破环就行了。
具体实现可以参见 luogu 题解区。
「JOI 2017 Final」足球
https://www.luogu.com.cn/article/zsi8sd7l
踢球要分横竖,是因为我们并不能在没有人的情况下让球自己拐弯。
「COI2012」TRAMPOLIN
直接将每个点可以去到的点连有向边,然后就是求最长路。
蹦床的话,就建一个虚点连向所有的点就行了。
最后缩点,然后 topo 就行了。
4min
「CF576D」Flights for Regular Customers
注意到,答案的路径一定存在一个分界点,到她之前经过的最后一条边 \(d=D\) 是恰好满足 \(d_i\) 的性质的。剩下经过的边的 \(d\) 都小于 \(D\)。特别的 \(1\) 也算一个分界点。
所以,考虑枚举这个可以经过的边的阈值 \(D\),也即从小到大加边。
如果我们知道在恰好经过 \(D\) 条边,且满足 \(d_i\) 的限制的时候,能够到达哪些点(也就是那些可能的分界点)。就可以直接跑一遍多源最短路来获得答案。
考虑怎么维护这个连通性。
对于一张图的邻接矩阵,将其是为一个矩阵 \(A\)。
那么 \(A^n\) 可以表示恰好经过 \(n\) 条边,能够到达的那些点。
这个东西正确,是因为 矩阵乘法 和 floyd 具有高度的一致性。
时间复杂度是:\(O(mn^3\log d)\)。很悬。
注意到矩阵的取值只有 0/1,改成 bitset 可以做到 \(O\left(\dfrac {mn^3\log d}\omega\right)\)。