zoukankan      html  css  js  c++  java
  • 【题解】 CF1290C Prefix Enlightenment

    题目链接

    题目大意:

    (n)盏灯排成一排,还有(k)个开关,第(i)个开关可以使集合(A_i)里的灯改变状态(开( o)关,关( o)开),且每盏灯最多由两个开关控制

    给出所有灯的初始状态,对于每个满足(1leqslant ileqslant n)(i),计算使前(i)个灯均打开,至少使用开关的数量。

    观察发现,每个开关只有两个状态:使用和不使用。设(p_i)表示使用第(i)个开关。

    若一盏灯不受任何开关控制,则直接跳过。

    若一盏灯受一个开关控制,设其为(a)

    • 如果(s_i=1),则(p_aleftrightarrow0,lnot p_aleftrightarrow1)
    • 如果(s_i=0),则(p_aleftrightarrow1,lnot p_aleftrightarrow0)

    若一盏灯受两个开关控制,设其为(a,b)

    • 如果(s_i=1),则(p_aleftrightarrow p_b,lnot p_aleftrightarrow lnot p_b)
    • 如果(s_i=0),则(p_aleftrightarrowlnot p_b,lnot p_aleftrightarrow p_b)

    按照上面的方法对(0,1,p_i,lnot p_i)连边,并将四者的权值分别赋为(infty,0,1,0),发现按照下面方法选出的点集的最小权值和就是答案。

    1. (p_i)(lnot p_i)之中必须且至少选一个。(0)(1)之间也一样。

    2. 与被选点之间有边相连的点必须被选。(即每次必须选择一个完整的连通块)

    然后就是用并查集维护连通块了……

  • 相关阅读:
    list 集合工具类
    Java获取当前系统时间的前N小时时间
    注意点
    小bug
    Linux常用命令
    MySql的执行计划
    【解决问题】引入.vmx文件后,xshell连接Could not connect to ‘192.168.211.132‘ (port 22): Connection failed
    星涛:javaEE学习路线一览
    Vue响应式原理
    Java操作Xml文件
  • 原文地址:https://www.cnblogs.com/ztc03/p/12364652.html
Copyright © 2011-2022 走看看