离线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+min(y1,y2))*2;return x1==x2?i:i+1;
}
struct node;
typedef node*ptr;
struct vec{int v;ptr i,s,t;vec(){v=inf;}
};
bool operator<(vec a,vec b){return a.v<b.v;
}
struct node{ptr i,j,p;bool r;vec v,s;node();ptr up(){s=min(min(v,i->s),j->s);return this;}void down(){if(r)i->r^=1,j->r^=1,swap(i,j),r=0;}
}e[120000];
node::node(){i=j=p=e;}
bool root(ptr o){return o!=o->p->i&&o!=o->p->j;
}
void turn(ptr o){ptr s=o->p,t=s->p;if(!root(s))(s==t->i?t->i:t->j)=o;o->p=t,s->p=o;if(o==s->i)s->i=o->j,o->j->p=s,o->j=s->up();elses->j=o->i,o->i->p=s,o->i=s->up();
}
void push(ptr o){if(!root(o))push(o->p);o->down();
}
ptr splay(ptr o){push(o);while(!root(o)){if(!root(o->p))turn(o==o->p->i^o->p==o->p->p->i?o:o->p);turn(o);}return o->up();
}
ptr exp(ptr o){ptr s=e;while(o!=e)splay(o)->j=s,s=o->up(),o=o->p;return s;
}
ptr bel(ptr o){o=exp(o);while(o->i!=e)o=o->i,o->down();return o;
}
bool jud(ptr s,ptr t){exp(s)->r=1;return bel(t)==s;
}
void link(ptr s,ptr t){exp(s)->r=1,splay(s)->p=t;
}
bool cut(ptr s,ptr t){exp(s)->r=1,exp(t);splay(t);if(s==t->i&&s->j==e)return t->i=s->p=e;return 0;
}
ptr cal2(int i){return e+n*n+i+1;
}
bool link(int x1,int y1,int x2,int y2){ptr s=e+x1*n+y1+1;ptr t=e+x2*n+y2+1;int i=cal1(x1,y1,x2,y2);if(!jud(s,t)){link(s,cal2(i));link(t,cal2(i));return 1;}exp(s)->r=1;vec v=exp(t)->s;if(v<cal2(i)->v){cut(v.s,v.i);cut(v.t,v.i);link(s,cal2(i));link(t,cal2(i));}return 0;
}
bool cut(int x1,int y1,int x2,int y2){ptr s=e+x1*n+y1+1;ptr t=e+x2*n+y2+1;int i=cal1(x1,y1,x2,y2);if(cut(s,cal2(i)))return cut(t,cal2(i));return 0;
}
int m,t,c6[2],c1[200][200];
queue<int>c3[80000];
void pre(int x1,int y1,int x2,int y2){if(!~x1||x1==n||!~y1||y1==n||!~x2||x2==n||!~y2||y2==n)return;int i=cal1(x1,y1,x2,y2);if(c1[x1][y1]==c1[x2][y2])c3[i].push(t);
}
void ins(int x1,int y1,int x2,int y2){if(!~x1||x1==n||!~y1||y1==n||!~x2||x2==n||!~y2||y2==n)return;int i=cal1(x1,y1,x2,y2);if(c1[x1][y1]==c1[x2][y2]){cal2(i)->v.i=cal2(i);cal2(i)->v.s=e+x1*n+y1+1;cal2(i)->v.t=e+x2*n+y2+1;if(c3[i].empty())cal2(i)->v.v=inf;else{cal2(i)->v.v=c3[i].front();c3[i].pop();}if(link(x1,y1,x2,y2))--c6[c1[x1][y1]];}
}
void del(int x1,int y1,int x2,int y2){if(0<=x1&&x1<n&&0<=y1&&y1<n&&0<=x2&&x2<n&&0<=y2&&y2<n&&c1[x1][y1]==c1[x2][y2]&&cut(x1,y1,x2,y2))++c6[c1[x1][y1]];
}
struct que{int x,y;};
que c2[10000];
int main(){struct{operator int(){int x=0,c=getchar();while(c<48)c=getchar();while(c>32)x=x*10+c-48,c=getchar();return x;}}it;n=it;for(int i=0;i<n;++i)for(int j=0;j<n;++j)++c6[c1[i][j]=it];m=it;for(int&i=t=0;i<m;++i){int x=it-1,y=it-1;c2[i].x=x,c2[i].y=y;for(int j=0;j<4;++j)pre(x,y,x+dx[j],y+dy[j]);c1[x][y]^=1;}for(int i=m-1;~i;--i)c1[c2[i].x][c2[i].y]^=1;for(int i=0;i<n;++i)for(int j=0;j<n;++j){ins(i,j,i,j+1);ins(i,j,i+1,j);}for(int i=0;i<m;++i){int x=c2[i].x,y=c2[i].y;for(int j=0;j<4;++j)del(x,y,x+dx[j],y+dy[j]);--c6[c1[x][y]];++c6[c1[x][y]^=1];for(int j=0;j<4;++j)ins(x,y,x+dx[j],y+dy[j]);printf("%d %d\n",c6[1],c6[0]);}
}

转载于:https://www.cnblogs.com/f321dd/p/6545228.html

BZOJ1453: [WC2005]Dface双面棋盘相关推荐

  1. BZOJ1453: [Wc]Dface双面棋盘

    Time Limit: 10 Sec Memory Limit: 64 MB Submit: 784 Solved: 422 [Submit][Status][Discuss] Description ...

  2. [WC2005]双面棋盘,洛谷P4121,线段树分治+可撤销并查集

    正题 这题主要是来练手的,因为没写过可撤销的并查集,大概就是把每一个格子看成一个点,然后格子直接的边有很多的出现区间,把这些出现区间和对应的颜色打到线段树上,然后用可撤销的并查集来维护就可以了. #i ...

  3. 2019年互联网公司月饼哪家强?阿里、百度、网易等14家中秋月饼盘点

    一年一度的中秋节日马上到来,"八月十五月儿圆,中秋月饼香又甜",没有月饼的中秋节是不完整的.而在互联网公司,月饼已然成为福利和文化的象征.特别是一些互联网大厂,在月饼设计上特别用心 ...

  4. 视网膜电图特征可以检测成人的抑郁状态和治疗反应:一种机器学习方法

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 视网膜电图特征可以检测成人的抑郁状态和治疗反应:一种机器学习方法 摘要 1. 引言 2. 方法和材料 2.1 人口与伦理声明 2.2 ...

  5. 中秋快乐!2019年互联网公司月饼哪家强?

    作者:过往记忆大数据 来源:过往记忆大数据 一年一度的中秋节日马上到来,"八月十五月儿圆,中秋月饼香又甜",没有月饼的中秋节是不完整的.而在互联网公司,月饼已然成为福利和文化的象征 ...

  6. 2019年互联网公司月饼哪家强?

    作者:过往记忆大数据 来源:过往记忆大数据 一年一度的中秋节日马上到来,"八月十五月儿圆,中秋月饼香又甜",没有月饼的中秋节是不完整的.而在互联网公司,月饼已然成为福利和文化的象征 ...

  7. 月饼节快乐!2019腾讯、阿里、百度、京东、小米等互联网公司月饼大盘点

    2019年还剩下三分之一 今天迎来中国重要的传统节日 那就是"中秋节" 说到中秋节脑海里面第一想到的 当然就是月饼了 "八月十五月儿圆,中秋月饼香又甜" 月饼象 ...

  8. 线段树专题-黑白棋盘 BZOJ-1453

    线段树专题-黑白棋盘 题目来源 BZOJ−1453BZOJ-1453BZOJ−1453 题意 QQQ次操作 每次操作给出(x,y)(x,y)(x,y),将(x,y)(x,y)(x,y)个格子颜色取反 ...

  9. iOS简易蓝牙对战五子棋游戏设计思路之二——核心棋盘逻辑与胜负判定算法

    2019独角兽企业重金招聘Python工程师标准>>> iOS简易蓝牙对战五子棋游戏设计思路之二--核心棋盘逻辑与胜负判定算法 一.引言 上一篇博客我们介绍了在开发一款蓝牙对战五子棋 ...

最新文章

  1. Hadoop葵花宝典(一)
  2. asmlib方式管理oracle asm环境下,新加存储需特别注意
  3. Linux 学习手记(6): 磁盘、分区、MBR与GPT
  4. Iptables防火墙详细介绍与实战增强服务器安全
  5. boost::mp11::mp_replace_third相关用法的测试程序
  6. 深度学习总结:GAN,3种方式实现fixedGtrainD,fixedDtrainG, retain, detach
  7. (三)Boost库之字符串处理
  8. 就要有鹤立鸡群的HTML5资本
  9. Android 布局 优先显示右侧的控件
  10. 有关计算机科学导论的说法,计算机科学导论__练习题_汇总.docx
  11. 黑马vue实战项目-(七)订单管理页面的开发
  12. 桌面计算机 回收站图标,桌面回收站图标不见了?回收站图标没了?3种方法快速解决...
  13. 怎样把word文档里的html格式去掉,word文档去除格式
  14. 如何预防网站被篡改,劫持
  15. Mac搭建Airtest iOS自动化测试环境
  16. H264/H265码流的编码码率设置
  17. SQLRecoverableException: Closed Connection
  18. python3.5 爬取bing搜索结果页面标题、链接
  19. android编程xml动画,Android中xml设置Animation动画效果详解
  20. unity和android交互问题整理

热门文章

  1. debain unable to find the kernel_云改的核心技术:主机虚拟化(TO 政企人员)
  2. boostrap-table export 导出监听
  3. 国货美瞳相继完成资本融资,网络推广下美瞳是否能成为下一个国货爆品?
  4. 一个成熟的网站模板如何引起用户的注意?
  5. 网站网页编写需要注意哪些问题?
  6. python数据分析numpy_利用python进行数据分析-NumPy高级应用
  7. 两对光纤收发器用网线连接_光纤那么快,路由器和电脑之间为何不用光纤连接,反而用普通网线...
  8. tensor torch 构造_TORCH.TENSOR
  9. for和foreach分析
  10. 封装设置属性,一家人都要整整齐齐系列(1) JAVA泛型的实现原理