题目大意:
有\(n\)盏灯排成一排,还有\(k\)个开关,第\(i\)个开关可以使集合\(A_i\)里的灯改变状态(开\(\to\)关,关\(\to\)开),且每盏灯最多由两个开关控制。
给出所有灯的初始状态,对于每个满足\(1\leqslant i\leqslant n\)的\(i\),计算使前\(i\)个灯均打开,至少使用开关的数量。
观察发现,每个开关只有两个状态:使用和不使用。设\(p_i\)表示使用第\(i\)个开关。
若一盏灯不受任何开关控制,则直接跳过。
若一盏灯受一个开关控制,设其为\(a\)
若一盏灯受两个开关控制,设其为\(a,b\)
按照上面的方法对\(0,1,p_i,\lnot p_i\)连边,并将四者的权值分别赋为\(\infty,0,1,0\),发现按照下面方法选出的点集的最小权值和就是答案。
\(p_i\)和\(\lnot p_i\)之中必须且至少选一个。\(0\)和\(1\)之间也一样。
与被选点之间有边相连的点必须被选。(即每次必须选择一个完整的连通块)
然后就是用并查集维护连通块了……
【题解】 CF1290C Prefix Enlightenment
原文:https://www.cnblogs.com/ztc03/p/12364652.html