bzoj#4423-[AMPPZ2013]Bytehattan【并查集】
正题
题目链接:https://darkbzoj.tk/problem/4423
题目大意
给出一个\(n*n\)的网格图,然后四联通的点之间连接。每次删掉一条边求这条边的两个点是否连通。强制在线。
\(1\leq n\leq 1500,1\leq m\leq 2n(n-1)\)
解题思路
转换成对偶图之后就可以变成加边判断连通性的问题了。
一个很简单的理解就是如果新的删去的边在对偶图构成了一个环那么就会被分成环内和环外了。
时间复杂度\(O(m\alpha(m))\)
code
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1600;
int n,k,fa[N*N];
int find(int x)
{return (fa[x]==x)?(x):(fa[x]=find(fa[x]));}
void Unionm(int x,int y){
x=find(x);y=find(y);
if(x==y)return;fa[x]=y;
}
int main()
{
scanf("%d%d",&n,&k);
bool last=1;
for(int i=1;i<=(n+1)*(n+1);i++)fa[i]=i;
for(int i=1;i<=n;i++){
Unionm(i,i+1);
Unionm((i-1)*(n+1)+1,i*(n+1)+1);
Unionm(n*(n+1)+i,n*(n+1)+i+1);
Unionm((i-1)*(n+1)+n+1,i*(n+1)+n+1);
}
for(int i=1;i<=k;i++){
int x1,x2,y1,y2,x,y,p,q;
char op1[2],op2[2],op;
scanf("%d%d%s",&x1,&y1,&op1);
scanf("%d%d%s",&x2,&y2,&op2);
if(last)x=x1,y=y1,op=op1[0];
else x=x2,y=y2,op=op2[0];
if(op=='N'){
p=x*(n+1)+y+1;
q=(x-1)*(n+1)+y+1;
p=find(p);q=find(q);
if(p!=q)last=1,puts("TAK");
else last=0,puts("NIE");
}
else{
p=x*(n+1)+y+1;
q=x*(n+1)+y;
p=find(p);q=find(q);
if(p!=q)last=1,puts("TAK");
else last=0,puts("NIE");
}
Unionm(p,q);
}
return 0;
}
bzoj#4423-[AMPPZ2013]Bytehattan【并查集】的更多相关文章
- BZOJ 4423: [AMPPZ2013]Bytehattan 并查集+平面图转对偶图
4423: [AMPPZ2013]Bytehattan Time Limit: 3 Sec Memory Limit: 128 MB Submit: 277 Solved: 183 [Submit ...
- bzoj 4423 [AMPPZ2013]Bytehattan(对偶图,并查集)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4423 [题意] 给定一个平面图,随时删边,并询问删边后两点是否连通.强制在线. [科普 ...
- BZOJ 4423: [AMPPZ2013]Bytehattan 平面图转对偶图 + 并查集
Description 比特哈顿镇有n*n个格点,形成了一个网格图.一开始整张图是完整的.有k次操作,每次会删掉图中的一条边(u,v),你需要回答在删除这条边之后u和v是否仍然连通. Input 第一 ...
- BZOJ 4423: [AMPPZ2013]Bytehattan
Sol 对偶图+并查集. 思路非常好,将网格图转化成对偶图,在原图中删掉一条边,相当于在对偶图中连上一条边(其实就是网格的格点相互连边),每次加边用并查集维护就可以了. 哦对,还要注意边界就是网格外面 ...
- 【BZOJ-4423】Bytehattan 并查集 + 平面图转对偶图
4423: [AMPPZ2013]Bytehattan Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 144 Solved: 103[Submit][ ...
- BZOJ 3674 可持久化并查集加强版(路径压缩版本)
/* bzoj 3674: 可持久化并查集加强版 http://www.lydsy.com/JudgeOnline/problem.php?id=3674 用可持久化线段树维护可持久化数组从而实现可持 ...
- BZOJ 3674 可持久化并查集加强版(按秩合并版本)
/* bzoj 3674: 可持久化并查集加强版 http://www.lydsy.com/JudgeOnline/problem.php?id=3674 用可持久化线段树维护可持久化数组从而实现可持 ...
- bzoj 3674: 可持久化并查集加强版 (启发式合并+主席树)
Description Description:自从zkysb出了可持久化并查集后……hzwer:乱写能AC,暴力踩标程KuribohG:我不路径压缩就过了!ndsf:暴力就可以轻松虐!zky:…… ...
- BZOJ 3674 可持久化并查集加强版(主席树变形)
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MB Submit: 2515 Solved: 1107 [Submit][Sta ...
- bzoj 4025 二分图 分治+并查集/LCT
bzoj 4025 二分图 [题目大意] 有n个点m条边,边会在start时刻出现在end时刻消失,求对于每一段时间,该图是不是一个二分图. 判断二分图的一个简单的方法:是否存在奇环 若存在奇环,就不 ...
随机推荐
- Ratel:一直站在Android逆向巅峰的平头哥
本文来源:带动行业内卷,渣总义不容辞 字越少事儿越大,请关注github(可以点击阅读原文): https://github.com/virjarRatel 平头哥(ratel)是一个Android逆 ...
- nodejs 更改项目端口号的 方法
我这里是 koa2 项目 1.项目目录 serverConf.js 这里面配置端口 代码如下: const ServerConf= { ServicePort: 3036 }; module.expo ...
- C#基础知识---is与as
一.is与as对比 is检查一个对象是否兼容于指定的类型,并返回一个Boolean值:true或者fasle. 注:is操作符永远不会抛出异常 经常按如下方法使用: ClassA { .... } O ...
- Qt event()
event() 今天要说的是 event()函数.记得之前曾经提到过这个函数,说在事件对象创建完毕后,Qt 将这个事件对象传递给 QObject的 event()函数.event()函数并不直接处理事 ...
- 【linux】vim常用命令
转自:https://www.runoob.com/linux/linux-vim.html vi/vim 的使用 基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输 ...
- Spring详解(四)------注解配置DI
第一步:在 applicationContext.xml 中引入命名空间 这里我们简单讲解一下这里引入的命名空间,简单来说就是用来约束xml文件格式的.第一个 xmlns:context ,这表示标签 ...
- jQuery中ajax请求的六种方法(三、三):$.post()方法
3.$.post()方法 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- Oracle数据库 —— DML完结
时间:2016-8-18 01:17 ----------------------------------------------------------------------------停下休息的 ...
- 【C语言】第4章 选择结构程序设计
第4章 选择结构程序设计 C语言有两种选择语句: if 语句,实现两个分支的选择结构 switch 语句,实现多分支的选择结构 输入3个数a,b,c,要求按由小到大的顺序输出. 可以先用伪代码写出算法 ...
- freeswitch新增模块
概述 freeswitch的架构由稳定的核心模块和大量的外围插件式模块组成.核心模块保持稳定,外围模块可以动态的加载/卸载,非常灵活方便. 外围模块通过核心提供的 Public API与核心进行通信, ...