Dinic Rush
2022.3.20 模拟赛 T1
之 直角拐弯绳子
因为是私题,所以没有题面。
手玩可得全为偶数的点 能且仅能 为 \(A_0\),全为奇数的点 能且仅能 为 \(A_k\)。
显然是,最小割。如果点 \(P\) 可以通过将数值为偶数的一维 +1 或 -1 变成 \(Q\),那么连边 \(P\to Q\)。
以及生而注定 \(A_0\) 点被源点连,生而注定 \(A_k\) 点把汇点连。
跑最小割即可。
P5934 - [清华集训2012]最小生成树
https://www.luogu.com.cn/problem/P5934
\(u\to v:w\) 存在于最小生成树中,当且仅当连上所有 \(< w\) 的边后,\(u,v\) 不连通。于是最小割即可,最大生成树同理。
如果是要求 \(u\to v:w\) 在所有的最小生成树中,那么将 \(<w\) 改成 \(\le w\)。
P1361 - 小M的作物
https://www.luogu.com.cn/problem/P1361
最大流不行就最小割。
注意:删去最小 = 留下最大!我是 nT !
P3980 - [NOI2008] 志愿者招募
https://www.luogu.com.cn/problem/P3980
首先看到有两种条件:费用和人数,那么想到费用流
首先建立 \(n\) 个点代表 \(n\) 天,从 S 向 1 连边,\(i\) 和 \(i+1\) 连边,\(n\) 向 T 连边。这些边边权为 \(\inf-a_i\)(S,T的边是 inf),费用是 0.
然后对于一个人,连边 \(s_i\to t_i:[\inf,c_i]\)。流量为 inf,因为有无限个志愿者。
为什么是正确的?考虑如果 \(i\) 号点得到的流量是 inf,那么 \(i+1\) 号点 通过 \(i\to i+1\) 边得到的流量,就是 \(\inf-a_i\),剩下的 \(a_i\) 个流量,就必须要通过「人」边来传递了!
P7425 - [THUPC2017] 机场
https://www.luogu.com.cn/problem/P7425
与上题原理相同。然而我懒得看题面
FROM https://www.luogu.com.cn/training/1230#problems
CF311E - Biologist
https://www.luogu.com.cn/problem/CF311E
最大权闭合子图问题。(此问题的模板https://blog.csdn.net/can919/article/details/77603353)
先把原串全变成 1,然后计算此时的答案,ans0 =【所有变 1 要求的奖励之和】-【 0 变成 1 的所有 \(v_i\) 】-【非法的要求的赔偿之和】。
如果想满足一个要求,就要满足所有的 0,1 都匹配,于是想到最大权闭合子图。
我们给原串的 \(n\) 个位置,建立相应的 \(n\) 个点。对于 \(m\) 个要求,也建立相应的 \(m\) 个点。
对于一个变 0 要求,连边它到所有所需位置的原串点,权值为 inf。然后源点给他连上边权为 \(w+g\) 的边(相当于反悔)。
对于一个变 1 要求,连边所有位置到它所需位置的原串点,权值为 inf。然后他给汇点连上 \(-w-g\) 的边。
答案就是 所有正权边 减去 最小割(注意:事实上跑最小割时,边权都是绝对值)再加上原来的 ans0。
注:事实上发现答案加上 ans0,刚好就是 \(\sum w\) 减去 最小割。
P6054 - [RC-02] 开门大吉
https://www.luogu.com.cn/problem/P6054
算出 \(i\) 人答 \(j\) 题的期望得分 \(v(i,j)\)。
这种分配的问题,考虑最小割。
那么考虑给每个人弄一个“答题链”,也就是 \(dot(i,j),j\in [1,m]\),然后相邻的点连边 \(v(i,j)\)。如此做出,则【刚好答一套题】就是【割掉一条边】。
对于限制:第 \(i\) 个人比第 \(j\) 个人大 \(k\),连边 \(dot(j,x),dot(i,\ \min(m,x+k)\ )\),容量为 inf,代表如果 \(i,j\) 相差小于 \(k\) 那么 就会导致流 inf 边流过。
P2053 - [SCOI2007]修车
https://www.luogu.com.cn/problem/P2053
对于每个人的等待时间不好考虑,转而考虑每辆车会对答案产生多少贡献。
不难看出,如果第 \(i\) 辆车是第 \(j\) 位技术人员倒数第 \(k\) 个修的,那么就会产生 \(k*cost_{i,j}\) 的代价。
那么我们把每个技术人员拆成 \(k\) 个点,每个点表示倒数第 \(k\) 个进行的工作,每个结点连的边的费用也就乘以对应的 \(k\) 倍。
由于费用流的最优性,这些点一定是顺次选取的。
P4043 - [AHOI2014/JSOI2014]支线剧情
https://www.luogu.com.cn/problem/P4043 之 galgame 玩家
首先保证每个点至少流量为 1.然后还要求费用最小。
这把 【费用 + 上下界可行流】写在脸上了。不愧是 2014 的题目。
P4553 - 80人环游世界
https://www.luogu.com.cn/problem/P4553
刚好流过 \(V_i\) 个流?直接上下界无脑放就行了。
注意每个点都要从源点连边,向汇点连边,因为我可以从任意国家启航,从任意国家结束旅行。
P1646 - [国家集训队]happiness
https://www.luogu.com.cn/problem/P1646
经典模型。
P3511 - [POI2010]MOS-Bridges
https://www.luogu.com.cn/problem/P3511
先二分答案,那么有一些边是双向边,有一些边是单向边。注意,双向边不能拆成两个单向,因为一条边只能走一次。
如何判断是否有欧拉回路?
两个条件:图联通,每个点只有一个出度和一个入度。
于是网络流:对于每个点建一个点,每个边也建一个点。
然后按照理解连边即可。