首页 > 其他分享 >题解【CF1592F2 Alice and Recoloring 2】

题解【CF1592F2 Alice and Recoloring 2】

时间:2022-12-02 18:46:41浏览次数:78  
标签:题解 rep CF1592F2 Alice add ans 操作 翻转

CF1592F2 Alice and Recoloring 2 解题报告。
不一定更好的阅读体验
摘自我的 构造题目选做 例题 IV。

CF 2800 的构造就这?/cf/cf/cf(

首先,操作 2 和操作 3 都是没有用的,因为都可以表示成两次操作 1 的形式,而且花费都不比两次操作 1 要优。

考虑将字符 B 看成 \(1\),字符 W 看成 0,那么目标就是要将给定的矩阵通过翻转变成全 \(0\) 矩阵。

但是矩形的翻转是不好做的,自然的想法是通过二维差分转成单点修改。即我们令 \(c_{i,j}=(a_{i,j}+a_{i+1,j}+a_{i,j+1}+a_{i+1,j+1})\bmod 2\),那么令 \(A\) 每一项变成 \(0\) 其实就是令 \(C\) 每一项变成 \(0\)。

考虑操作的影响。以 \((x,y)\) 为右下角进行操作 1,实际上只会改变 \(c_{x,y}\) 的奇偶性;以 \((x,y)\) 为左上角进行操作 2,实际上只会改变 \(c_{x-1,y-1}\),\(c_{x-1,m}\),\(c_{n,y-1}\),\(c_{n,m}\) 这四项的奇偶性。

这里先讲一下 F1 的做法,如果对 \((x,y)\) 进行操作 \(2\),必须要满足上述四个点的 \(c\) 都为 \(1\)。原因很简单,如果有至少一个为 \(0\),那么反转之后还需要再进行一次操作 \(1\) 反转回来,总花费为 \(3+1=4\),实际上只需要 \(3\) 次 \(1\) 操作就可以搞定,花费为 \(3\)。注意到每次都会翻转 \((n,m)\) 这个点,所以说操作 4 只会进行一次。那么我们只要枚举一下是否有能够进行操作 4 的 \((x,y)\) 即可。时间复杂度 \(O(n^2)\),可以通过本题。

接下来讲得是 F2 的做法,注意到操作 \(4\) 的花费变成 \(2\),显然是操作的四个点中可以存在一个 \(0\),那么我们就不用管 \((n,m)\) 这个点的取值了,因为每次都会更改它,最后一个 \(1\) 操作改回来就行,所以剩下那三个点必须都为 \(1\),且操作 4 是可以进行多次的。考虑 \((x,y)\),\((x,m)\),\((n,y)\) 这三个点有什么性质,如果我们对 \((x,y)\) 这个点翻转了,那么就意味着 \(x\) 这一行再也不能对任何一个点进行操作,因为 \((x,m)\) 被翻转成了 \(0\),同理,\(y\) 这一列也不能对任何一点进行操作。这不就很网络流了吗,每一行,每一列,每一个点都只能选一次,所以将 \(x\to y\) 连一条流量为 \(1\) 的边,\(S\le x\) 连一条流量为 \(1\) 的边,\(y\to T\) 连一条流量为 \(1\) 的边,跑 dinic 即可,其实本质上就是一个二分图最大匹配。最坏情况边数为 \(O(n^2)\),点数为 \(O(n)\),所以复杂度 \(O(n^2\sqrt{n})\),可以通过本题。

int main()
{
    n=read(),m=read();
    rep(i,1,n)
    {
    	scanf("%s",s+1);
    	rep(j,1,m) if(s[j]=='B') a[i][j]=true;
    }
    rep(i,1,n) rep(j,1,m) a[i][j]=a[i][j] xor a[i+1][j] xor a[i][j+1] xor a[i+1][j+1];
    S=0,T=n+m+1;
    rep(i,1,n-1) add_edge(S,i,1);
    rep(i,1,m-1) add_edge(i+n,T,1);
    rep(i,1,n-1) rep(j,1,m-1) if(a[i][j]&&a[i][m]&&a[n][j]) add_edge(i,j+n,1);
    int ans=0;
    while(bfs()) ans-=dfs(S,INF);
    if(ans&1) a[n][m]^=1;
    rep(i,1,n) rep(j,1,m) if(a[i][j]) ++ans;
    printf("%d\n",ans); 
    return 0;
}

标签:题解,rep,CF1592F2,Alice,add,ans,操作,翻转
From: https://www.cnblogs.com/UperFicial/p/16945329.html

相关文章

  • 上海交通大学MBA常见问题解答
    欢迎您报考上海交通大学MBA!欢迎大家提问,我们会及时为您答疑解惑。报考上海交通大学MBA常见问题解答欢迎各位考生登陆​​www.sjtumba.org/bbs​​,在那您的问题将会得到我们......
  • P4910 题解
    前言题目传送门!更好的阅读体验?矩阵快速幂优化DP经典题。题目简述给定一个长度为\(n\)的环,每个位置可以填\(1\)或\(2\)。相邻两个不能同时填\(1\)。求方案数......
  • 新生第三次练习题解
    bs来送签到啦简单思考下就知道无论选择何种路线从左上角到右下角,通过平移后就等价于先向下走到底再向右走到底,所以只要两个循环累加下两条边的的价值就能得到答案(注意循......
  • sql题解--求出平台同时在线最多的人数
    题目-求出平台同时在线最多的人数题目需求根据用户登录明细表(user_login_detail),求出平台同时在线最多的人数。结果如下:cn7需要用到的表:用户登录明细表:us......
  • BZOJ 4833 最小公倍佩尔数 题解 (数论,推式子)
    题目链接神奇数论题。做这题需要知道两个结论:对于满足\(f_{i+2}=a\cdotf_{i+1}+b\cdotf_{i}\),也就是形式类似斐波那契数列的序列,有\(gcd(f_i,f_j)=f_{gcd(i,j)}\)(据......
  • 高通 QXDM5 安装后 打不开 问题解决
    QXDM5安装完成后,打开时显示找不到Qt5WebKit.dll文件,网上找了Qt5WebKit.dll等dll导入QXDM5目录,照样是失败,打不开程序,最终找到的解决方案如下:1.先卸载已安装的QXDM5和 Q......
  • shiro低版本更新到高版本(>1.10.0)出现报错问题解决
    近期漏洞爆出(ApacheShiro<1.10.0身份认证绕过漏洞),开始升级新版的jar包。升级过程1.修改pom文件shiro版本<!--shiro--><dependency><groupId>org.apache.......
  • PUTTY 使用vi命令编辑文件的时候Backspace老出问题解决方案
    问题原因分析系统自带的vi命令存在这个问题,需要安装vim来解决问题安装vim编辑器删除vim-common模块apt-getremovevim-common安装vim模块apt-getinstallvim再使用vi命令,......
  • CF1550F 题解
    题意传送门数轴上顺次有\(n\)个点\(a_1<a_2<\cdots<a_n\)。有一只小青蛙,初始时在\(a_s\)处。小青蛙有两个参数:步长\(d\)和灵活程度\(k\)。其中,步长\(d\)......
  • 题解 CF1703G Good Key, Bad Key
    先放个代码。intn,k;cin>>n>>k;vector<vector<int>>a(n+5,vector<int>(35));for(inti=1;i<=n;i++){cin>>a[i][0];for(intj=1;j......