bzoj 1453 双面棋盘】的更多相关文章

题目大意: 一个黑白方格图 支持单点修改 查询黑色与白色联通快个数 思路: 可以把每一行压为一个点 使用线段树来维护 然后两行合并的时候使用并查集来合并 #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #include<queue> #include<…
1453: [Wc]Dface双面棋盘 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 617  Solved: 317[Submit][Status][Discuss] Description Input Output Sample Input Sample Output HINT       用线段树+数组模拟并查集,维护每一列的连通性,然后暴力合并就行了,常数巨大 #include<cstdio> #include<cstring>…
[BZOJ1453][Wc]Dface双面棋盘 Description Input Output Sample Input Sample Output HINT 题解:话说看到题的第一反应其实是LCT...还是学学正解的写法吧(虽然复杂度不如LCT). 我们用线段树维护所有的行,每个叶子节点都代表一个列,每个线段树的节点都维护如下信息:左面那列的连通情况(用并查集维护),右面那列的连通情况,左面那列的颜色,右面那列的颜色.合并的时候枚举中间的那列,如果相邻颜色相同则进行并查集合并.特别地,如果在…
题目 P4121 [WC2005]双面棋盘 貌似是刘汝佳出的题目?? 做法 线段树维护并查集 线段树分治\(1\)~\(n\)行,我们要考虑维护的肯定是黑.白各自的联通块数量 考虑区间合并,其实就与中间这两层有关,\((n≤200)\)并查集暴力做一下就好了 My complete code #include<cstdio> #include<cstring> #include<iostream> #include<string> #include<a…
Description Input Output Sample Input Sample Output HINT Solution 不强制在线的动态图问题,那就LCT了 类似二分图那道题目 对于四个方向,颜色相同的连边:那么每次翻转就变成了几次删边和几次加边(注意加边在删边之后):联通块数量就变成了LCT维护的森林的数量 先把所有动态的边存下来(离线),然后找到他们被删掉的时间,以时间为权值用LCT维护最大生成树,然后就保证了不会出现非树边代替树边的情况,所以只要删掉了一条树边,就一定会把一棵树…
2706: [SDOI2012]棋盘覆盖 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 255  Solved: 77[Submit][Status] Description 在一个N*M个方格组成的棋盘内,有K个方格被称为特殊方格.我们要使用一组俄罗斯方块来覆盖这个棋盘,保证特殊方格不能被覆盖,非特殊方格只能被一个俄罗斯方块覆盖,求最多能容纳的俄罗斯方块的数量. 已知有以下三组俄罗斯方块,一个棋盘可能用其中的某一组.   Input 第一行三个…
状压dp, 然后转移都是一样的, 矩阵乘法+快速幂就行啦. O(logN*2^(3m)) --------------------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm>   using namespace std;   #define b(x) (1 &l…
题目链接 1057: [ZJOI2007]棋盘制作 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 2027  Solved: 1019[Submit][Status][Discuss] Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳.而我们的主人公小Q,正是国际象棋的狂热爱好者.作为一个顶尖高…
对于第一问, 简单的dp. f(i, j)表示以(i, j)为左上角的最大正方形, f(i, j) = min( f(i + 1, j), f(i, j + 1), f(i + 1, j + 1)) + 1 (假如(i, j)和右边和下边不冲突) 第二问就是经典的悬线法解决最大子矩阵了, 维护悬线H[i][j], 左边右边延伸的最长距离.先一行一行求出这一行的L, R, 然后再从上往下扫, 维护H, L, R 写完我才发现我脑残了...最大的正方形一定是在最大子矩阵里面啊...所以其实不用dp.…
题面:P1169 [ZJOI2007]棋盘制作 题解: 基本是悬线法板子,只是建图判断时有一点点不同. 代码: #include<cstdio> #include<cstring> #include<iostream> #define min(a,b) ((a)<(b)?(a):(b)) #define max(a,b) ((a)>(b)?(a):(b)) using namespace std; inline int rd(){ ,f=;char c=ge…