图论-突突突突突 (Mar, 2019)

owo

[BZOJ 3681] Arietta

持久化,每次新建节点,避免影响之前的树。

[AGC 006 F] Blackout

统计每个弱连通分量,三个颜色染色之后把点重新编号,每个点为起点的边都可以用一个数字 \(v\) 表示,意义是按照 \(0,1,2\) 的顺序,边的终点在位置 \(v\) 。这样每个点都对应了一个集合。初始时,集合存在 \(1\) 。如果有 \(x,y\) ,就有 \(f(x,y)=-x-y\) 。其实能够直接推得的东西仅仅是:另外一个点的集合里面有 \(-x-y\) ,不过很多点的集合都相同,大部分情况下,自己的集合也会有这个东西。

以下构造只使用 \(1,-2\) ,这样结论可以适用于更多的点。

\(x \rightarrow f(x,1)=-x-1 \rightarrow f(-x-1,-2)=x+3\) ,所以 \(1+3k\) \((k \ge 0)\) 存在。

\(f(1,1+3k)=-2-3k\) ,所以 \(-2-3k\) \((k \ge 0)\) 存在。整合起来, \(S=\{1+3t| t \in N\}\)

因此,如果染色成功,初始集合只有 \(1\) ,答案是 \(cnt_0cnt_1+cnt_1cnt_2+cnt_2cnt_0\) 。不过一分图和二分图的时候,没有集合存在 \(-2\) ,此时什么也构造不出来,需要特判。

如果染色失败,说明存在下面两种情况中的一种,它们可能会使得集合存在更多的元素:

元素 \(0\) 就非常好,因为有 \(0\) 说明每个数都能用来构造它的相反数了,答案就是 \(cnt^2\)

第一种: \(2+3t \in S\)

\(t \ge 0\)\(f(2+3t,-2)=-3t \rightarrow f(-3t, 1)=3t-1\rightarrow f(3t-1,-2)=-3t+3 \rightarrow \cdots\) ,可以构造 \(0\)

\(t <0\)\(f(2+3t,1)=-3t-3 \rightarrow \cdots\) 可以构造 \(0\)

第二种: \(3t \in S\)

\(t \ge 0\)\(f(3t,-2)=-3t+2 \rightarrow f(-3t+2,1)=3t-3 \rightarrow \cdots\) ,可以构造 \(0\)

\(t < 0\)\(f(3t,1)=-3t-1 \rightarrow f(-3t-1,-2)=3t+3 \rightarrow \cdots\) ,可以构造 \(0\)

[ARC 080 F]

类似 LED 那道题的差分,假设已经知道 \(dis\) ,直接费用流不可取,但是的确又需要匹配。

计算 \(dis\) ,背包不行,通过哥德巴赫猜想可以得到(特殊数字 \(1=5+7-11,2=5-3\) ):

偶数 \(dis\)\(2\)

奇数,如果是素数 \(dis\) 就是 \(1\) ,否则是 \(3\)

然后匹配,通过分析,贪心选费用 \(1\) 的点对匹配是正确的,最坏情况 \(1+3\le 2+2\) ,仍然是最优的 。

所以先把费用是 \(1\) 的点,奇偶性建图,跑二分图匹配。剩下的偶数和偶数匹配,奇数和奇数匹配,费用 \(2\) 。如果还有剩余,肯定剩一对 \(dis\) 是奇数且是合数,费用 \(3\) 。最坏情况 \(2+3\le 3+3\) ,仍然是最优的。

转载于:https://www.cnblogs.com/ghcred/p/10443496.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值