又给自己菜自闭了

AGC043C Giant Graph

\(\color{grey}{\tiny{\text{某个我很久以前就知道的套路,现在才知道来源(}}}\)

题意

给你三个简单无向图 \((V_1,E_1)\), \((V_2,E_2)\), \((V_3,E_3)\),构造一个新图 \((V,E)\),其点集 \(V\) 为:

\[V = \left\{{(u,v,w)| u \in V_1, v \in V_2, w\in V_3}\right\} \]

其边集 \(E\) 为:

  • \(u_1,u_2\in V_1\)\((u_1,u_2)\in E_1\),则对于任意 \(v\in V_2, w\in V_3\) 都有 \(((u_1,v,w),(u_2,v,w))\in E\)
  • \(v_1,v_2\in V_2\)\((v_1,v_2)\in E_2\),则对于任意 \(u\in V_1, w\in V_3\) 都有 \(((u,v_1,w),(u,v_2,w))\in E\)
  • \(w_1,w_2\in V_3\)\((w_1,w_2)\in E_3\),则对于任意 \(u\in V_1, v\in V_2\) 都有 \(((u,v,w_1),(u,v,w_2))\in E\)

在这个图中,定义 \((i,j,k)\) 的点权为 \(10^{18(i+j+k)}\),求最大权独立集的权值和,对 \(998244353\) 取模。

\(|V_i|,|E_i| \leq 10^5\)

题解

这个最大权独立集看起来没什么卵用,因为贪心从大往小选一定对,而权值一样的点是互不干涉的。

具体而言,把边定向成从小点连向大点,这就成了个 DAG。我会先选上所有没有出度的点,然后拓扑序逆序枚举,如果 \(x\) 的出度中有一个点被选了,\(x\) 就不选,否则选上。

DAG 上选一个独立集 \(S\),使得 \(S\) 外任意一点,都能走一条边到达某个 \(\in S\) 的点:看成博弈树,\(S\) 是必败。

所以游戏即为每人轮流将棋子移动一条边,我需要统计 DAG 上所有必败的点的点权和。

一个点 \((u,v,w)\) 显然是三个图上的独立游戏!于是乎我们要求的变成了:

\[\sum_i\sum_j\sum_k [a_i\oplus b_j \oplus c_k = 0] 10^{18(i+j+k)} \]

FWT 解决。其实 SG 函数是 \(O(\sqrt m)\) 级别的,所以暴力也对。

ABC257Ex Dice Sum 2

题意

\(n\) 个色子,第 \(i\) 个色子有 \(6\) 面,分别为 \(a_{i,1} \sim a_{i,6}\),购买之需要花费 \(c_i\)

你可以选择 \(k\) 个色子购买,然后把每个你买到的色子抛一次,你会获得正面朝上的点数之和的平方的收益。

问期望收益的最大值,对 \(998244353\) 取模。

\(n,k \leq 1000\), \(0\leq a_{i,j},c_i\leq 10^5\)

题解

假设将买的色子重新标号为 \(1\sim k\),收益为:

\[\begin{aligned} &\left(\sum_{i=1}^k \dfrac{\sum a_{i,x}^2}{6}-c_i\right)+\sum_{i=1}^k \sum_{j=1}^{k}[j\neq i]\dfrac{\left(\sum a_{i,x}\right)\left(\sum a_{j,x}\right)}{36}\\ =&\left(\sum_{i=1}^k \dfrac{\sum a_{i,x}^2}{6}-c_i-\dfrac{\left(\sum a_{i,x}\right)^2}{36}\right)+\dfrac{\left(\sum_{i=1}^k \sum a_{i,x}\right)^2}{36} \end{aligned} \]

记录 \(x_i=\dfrac{\sum a_{i,x}}6\)\(y_i=\dfrac{\sum a_{i,x}^2}{6}-c_i-x_i^2\),则我们要最大化 \((\sum x_i)^2+(\sum y_i)\)

我们把 \(\dbinom {n}{k}\) 种决策画成二维平面上若干个 \(\left(\sum x,\sum y\right)\) 的点。首先对于固定的 \(y\)\(x\) 只可能取最小或者最大的一个;而对于固定的 \(x\)\(y\) 越大越好。所以答案存在于上凸包上,我们考虑找出凸包上的所有点。

枚举所有实数斜率 \(k\) 去切这个凸包,实际意义则是找出 \(kx+y\) 最大的点,此时将每个色子按照 \(kx_i+y_i\) 排序,取最大 \(k\) 个相加即可。而在这个过程中色子的大小关系最多改变 \(O(n^2)\) 次,于是同时维护前 \(k\) 大就做到了 \(O(n^2\log n)\)

posted @ 2022-08-08 12:15  Ilith  阅读(168)  评论(7编辑  收藏  举报