bzoj 1453: [Wc]Dface双面棋盘】的更多相关文章

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>…
Description Input Output Sample Input Sample Output HINT Solution 不强制在线的动态图问题,那就LCT了 类似二分图那道题目 对于四个方向,颜色相同的连边:那么每次翻转就变成了几次删边和几次加边(注意加边在删边之后):联通块数量就变成了LCT维护的森林的数量 先把所有动态的边存下来(离线),然后找到他们被删掉的时间,以时间为权值用LCT维护最大生成树,然后就保证了不会出现非树边代替树边的情况,所以只要删掉了一条树边,就一定会把一棵树…
[BZOJ1453][Wc]Dface双面棋盘 Description Input Output Sample Input Sample Output HINT 题解:话说看到题的第一反应其实是LCT...还是学学正解的写法吧(虽然复杂度不如LCT). 我们用线段树维护所有的行,每个叶子节点都代表一个列,每个线段树的节点都维护如下信息:左面那列的连通情况(用并查集维护),右面那列的连通情况,左面那列的颜色,右面那列的颜色.合并的时候枚举中间的那列,如果相邻颜色相同则进行并查集合并.特别地,如果在…
点此看题面 大致题意: 给你一个\(n*n\)的黑白棋盘,每次将一个格子翻转,分别求黑色连通块和白色连通块的个数. \(LCT\)动态维护图连通性 关于这一部分内容,可以参考这道例题:[BZOJ4025]二分图. 大致思路 我们可以将同种颜色的相邻格子之间连边,这样就可以把问题搬到图上. 然后考虑先离线,把每两个格子间边的加入与删除的时间(同一条边可能被加入和删除多次)记录下来. 这样就可以用\(LCT\)动态维护图连通性了. 但注意这道题比较恶心,需要你每次求出两种颜色的连通块个数. 我一开始…
浅谈树状数组与线段树:https://www.cnblogs.com/AKMer/p/9946944.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?id=1453 线段树维护行区间,每个结点只记录这个区间最上面一行和最下面一行每个格子在当前区间内的并查集情况,然后区间\(update\)的时候暴力合并就行了.因为除去最上面一行和最下面一行以外的格子都没有用,所以要保证并查集的代表元素是最上面一行或者最下面一行的. 时间复杂度:\(O(m…
Description Input Output Sample Input Sample Output HINT 线段树套并查集应该是比较好写的做法,时间复杂度为O(N^3+M*NlogN). #include<cstdio> #include<cctype> #include<queue> #include<cstring> #include<algorithm> #define rep(i,s,t) for(int i=s;i<=t;i…
题解: 一道维护奇怪信息的线段树... 我刚开始看了标签想的是删去图上一个点后求连通性 发现不会 于是退化成一般图支持删除 插入 维护连通性 发现有2两种做法 1.lct维护 按照结束顺序先后排序,给每条边一个权值 然后我们只要维护最大生成树就好了,因为这样可以保证删除当前树上的边是不会被权值更小的边替换的 而由于最大生成树的性质,是不可能能替换成更大的边的 so这说明删除它之后就不需要连边了 nlogn^2但是常数大吧 2.线段树分治 这个应该很明显吧,变成只有插入的并查集问题 nlogn^2…
离线LCT维护MST,和3082的方法一样.然而比较码农,适合颓废的时候写. PS:线段树分治要好写得多,LCT比较自娱自乐. #include<bits/stdc++.h> using namespace std; const int dx[]={-1,1,0,0}; const int dy[]={0,0,-1,1}; const int inf=1e9; int n; int cal1(int x1,int y1,int x2,int y2){ int i=(min(x1,x2)*n+m…
Description Input Output Sample Input Sample Output HINT 线段树+并查集,暴力记录和更新一些信息,详情见代码注解. #include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define inf 0x7f7f7f7f using namespace std; typed…
题目 P4121 [WC2005]双面棋盘 貌似是刘汝佳出的题目?? 做法 线段树维护并查集 线段树分治\(1\)~\(n\)行,我们要考虑维护的肯定是黑.白各自的联通块数量 考虑区间合并,其实就与中间这两层有关,\((n≤200)\)并查集暴力做一下就好了 My complete code #include<cstdio> #include<cstring> #include<iostream> #include<string> #include<a…