Simultaneous Coloring

题目大意

给你一个 n×mn\times m 的矩阵,你可以将一行染成红色,或者将一列染成蓝色。依次的染色不需要代价,如果 kk 行或者列一起染色,就需要花费 k2k^2 的代价,但是你可以选择在相交的地方保留哪一种颜色。

qq 个询问,要求 (xi,yi)(x_i,y_i) 的颜色为 cic_i 和前面所有的询问的要求都满足的代价的总和的最小值。

其中数据范围满足,1n,m,q2×1051\le n,m,q\le 2\times 10^5

思路

考虑用图论的方法求解。

如果要求 (x,y)(x,y) 为蓝色,那么将 xx 行向 yy 列连边,表示 xx 被染色的时间不晚于 yy。同样的,如果要求 (x,y)(x,y) 为红色,那么将 yy 列向 xx 行连边,表示 yy 被染色的时间不晚于 xx

如果这样联出的图有强连通分量,那么这个前联通分量一定需要一起染色,所以代价就是强连通分量大小平方的和。

考虑对事件分治,假设现在考虑的是 [l,r][l,r],那么如果在 [l,r][l,r] 中是强连通分量就一定在 [mid+1,r][mid+1,r] 中也是,所以在求解 [mid+1,r][mid+1,r] 时就不用考虑。

而如果一条边在 [l,r][l,r] 中是不是强连通分量,那么在 [l,mid][l,mid] 中也同样不用考虑。

Submission #272283061 - Codeforces