2025.2.26
2025.2.26 模拟赛
capella
容易想到每次加一个点 \(x+1\) 的网络流模型:
- 源点向 \(1-x\) 连边
- \(1-x\) 向还没有的颜色连边
- 颜色向汇点连边
但是这样容易提前连出一个完全图,就会误判无解。
感受上,我们希望连边尽量平均,即尽量连当前较少的颜色。
于是给颜色到汇点的边赋上这个颜色的出现次数,跑费用流,\(O(m^4)\) 跑的飞快。
题解大概用另一种建模方式给出了这个贪心的证明。
pubaba
看不懂题解写的什么玩意...或许是证明贪心正确性?
key:在尽量给靠后的人前提下,\(ans_i=\left\lfloor \frac{ ct_{[i,n]}}{n-i+1}\right\rfloor\)
调整法易证,平均一定是最好安排的,且一定不能再安排更多的题目。
先满足 \(l_i\),然后对 \([l_i+1,r_i]\) 区间加,\(i=1-n\) 依次尝试给 \(n-i+1\) 增加题目,总题量到达 \(S\) 停止。
实现非常容易,差分即可,常数极小的 \(O(n+m)\)
rectangle
2024.11.19 做过
容斥 + 扫描线 码力题
将每个矩形看作一个点,有交的矩形之间连边,问题转化为求有多少个 \((i,j,k)\) 的生成子图没有边。
考虑容斥,用所有三元组的数量减去有边的三元组的数量。记有 \(1\) 条边的个数为 \(c_1\),\(2\) 条边的个数为 \(c_2\),\(3\) 条边的个数为 \(c_3\),答案为 \({n \choose 3} - c_1 -c_2 -c_3\)。
step1:用度数 \(d_i\) 求出 \(c_1+c_2\)
- 至少有一条边时(选一个点 \(i\),再选一个与 \(i\) 相连的点 \(j\),再随便选一个点 \(k\)):\(\sum d_i(n-2)=2c_1+4c_2+6c_3\)
- 至少有两条边时(选一个点 \(i\),再选两个与 \(i\) 相连的点 \(j,k\) ):\(\sum {d_i \choose 2} =c_2+3c_3\)
step2:扫描线求出 \(d_i\)
考虑正常的从左往右扫,此时可以保证横向全都有交,只需考虑纵向。
\((a,b)\) 纵向有交 当且仅当 \(yl_b\le yr_a\) 且 \(yr_b \ge yl_a\)(已知两两不同)
故用 \(\le yr_a\) 的 \(yl\) 数量减去 $< yl_a $ 的 \(yr\) 数量,最后再减掉自己即可。
横向扫描线就是对 \(xl\le xr_a\) 和 \(xr<xl_a\) 分别计算,保证横向有交。
step3:容斥求出 \(c_3\)
考虑在 \(xl\) 最大的位置统计三元组,不妨为 \(i\)。
从与 \(i\) 有交的点中选 \(j,k\),再减去 \(j,k\) 不交的情况。
发现此时 \(xl_j\le xl_i\le xr_j\) 且 \(xl_k\le xl_i\le xr_k\),即 \(j,k\) 横向必有交,故只需考虑纵向。
不妨令 \(yr_j<yl_k\),则必有 \(yl_i\le yr_j<yl_k\le yr_i\),可以用线段树维护。
附:线段树维护信息
\((a,b,c)\) 表示区间内有 \(a\) 个 \(yr\),\(b\) 个 \(yl\),\(c\) 对 \(yr<yl\)
合并时 \(a,b\) 直接相加,\(c\) 要加上左边的 \(a\) 乘右边的 \(b\)

浙公网安备 33010602011771号