题目描述:

有一张的地图,其中的地方是墙,的地方是路。有两种操作:

  1. 给出个地点,询问这个地点中活动空间最大的编号。若询问的位置是墙,则活动空间为;否则活动空间为询问地点通过四联通能到达的点的个数。如果有多个位置均为最大,输出给出顺序较前的那个。编号为

  2. 给出个地点,按照读入的顺序翻转这个地点的地形。即若原位置是墙,则该位置变为路;若原位置是路,则该位置变为墙。保证在将路变为墙时不会将一个区域分割,也不会将一个只有一格的区域填满。

保证每次操作只会询问或修改同一个位置至多一次。

————————————————我是分割线————————————————

首先我们先将一块连通的区域变为一个点,便于处理

接着我们来看修改操作:

如果一个点本来不联通,变成了连通,我们就有可能遇到两个区域连通的情况,所以我们要用并查集处理合并操作,并且合并的点不能在原图之上,要新开一个点。

但如果一个点变成墙,我们先将这个点所属的区块的压缩点的值-1,然后将这个点所属的区块设为0即可

#include<cstdio>
#include<cstring>
#define MN 1000005
using namespace std;
char ch;
int n,m,cnt,q;
bool map[MN];
int d[MN],sm[MN*],f[MN*];
void solve(int x,int y){
if(!map[(x-)*m+y]||d[(x-)*m+y])return;
++sm[d[(x-)*m+y]=cnt];
if(x>)solve(x-,y);
if(x<n)solve(x+,y);
if(y>)solve(x,y-);
if(y<m)solve(x,y+);
}
int getfa(int x){return f[x]?f[x]=getfa(f[x]):x;}
void merge(int x,int y,int xx,int yy){
if(!map[(xx-)*m+yy]||getfa(d[(x-)*m+y])==getfa(d[(xx-)*m+yy]))return;
sm[getfa(d[(xx-)*m+yy])]+=sm[getfa(d[(x-)*m+y])];
sm[getfa(d[(x-)*m+y])]=;
f[getfa(d[(x-)*m+y])]=getfa(d[(xx-)*m+yy]);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%c",&ch);
for(int j=;j<=m;j++){
scanf("%c",&ch);
if(ch=='*')map[(i-)*m+j]=false;
else map[(i-)*m+j]=true;
}
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
if(map[(i-)*m+j]&&!d[(i-)*m+j])++cnt,solve(i,j);
scanf("%d",&q);
int opt,tt,x,y;
for(int i=;i<=q;i++){
scanf("%d%d",&opt,&tt);
if(opt==){
int maxn=,maxnum=;
for(int j=;j<=tt;j++){
scanf("%d%d",&x,&y);
if(sm[getfa(d[(x-)*m+y])]>maxn)maxn=sm[getfa(d[(x-)*m+y])],maxnum=j;
}
printf("%d\n",maxnum);
}
else{
for(int j=;j<=tt;j++){
scanf("%d%d",&x,&y);
if(map[(x-)*m+y]){
sm[getfa(d[(x-)*m+y])]--;
d[(x-)*m+y]=;
map[(x-)*m+y]=false;
}
else {
++sm[d[(x-)*m+y]=++cnt];
map[(x-)*m+y]=true;
if(x>)merge(x,y,x-,y);
if(x<n)merge(x,y,x+,y);
if(y>)merge(x,y,x,y-);
if(y<m)merge(x,y,x,y+);
}
}
}
}
}

题(NOIP模拟赛Round #10)的更多相关文章

  1. 水(NOIP模拟赛Round #10)

    题目描述: 小Z有一个长度为的数列.他有次令人窒息的操作,每次操作可以使某个数字或.他当然是希望这些数字的乘积尽量小了.为了简化题目,你只需输出操作完成后的数列即可. ———————————————— ...

  2. 大(NOIP模拟赛Round #10)

    题目描述: 小Z有个n个点的高清大图,每个点有且只有一条单向边的出边.现在你可以翻转其中的一些边,使他从任何一个点都不能通过一些道路走回这个点.为了方便,你只需输出方案数对取模即可.当在两个方案中有任 ...

  3. NOIP模拟赛-2018.10.22

    模拟赛 今天第一节课是历史,当然是不可能上的,一来到机房发现今天高二考试... 老师说以后可能还要给高一考...那还不如现在跟着做好了,毕竟在学长学姐中垫底显得没那么丢人 这套题风格挺奇怪的...为什 ...

  4. NOIP模拟赛 17.10.10

    初次见面(firstmeet)[题目背景]雾之湖边,静得可怕.露米娅出神凝望.黑白连衣裙,像极了绽放的墨黑和洁白的莲.身边的雾之湖,倒映着血色天空.酒红的双眸,映照一切.低声浅笑,双臂伸直,她悄无声息 ...

  5. bananahill(NOIP模拟赛Round 8)

    题目描述 香蕉川由座香蕉山组成,第i座山有它的高度.小Z准备从左到右爬这里的恰好座香蕉山,但他不希望山的高度起伏太大,太过颠簸,会让本就体育不好的他过于劳累.所以他定义了爬山的劳累度是所有爬的相邻的两 ...

  6. 战斗机的祈雨仪式(NOIP模拟赛Round 7)

    [问题描述] 炎炎夏日,如果没有一场大雨怎么才能尽兴?秋之国的人民准备了一场祈雨仪式.战斗机由于拥有操纵雷电的能力,所以也加入了其中,为此,她进行了一番准备. 战斗机需要给自己的Spear of Lo ...

  7. 小红帽的画笔(NOIP模拟赛Round 7)

    又到了神奇的模拟赛时间~ 真是丧~ 好吧我们来看看题目 小红帽是Pop star上最著名的人类画家,她可以将任何画出的东西变成真实的物品.赋予她这样神奇能力的正是她手上的画笔. 小红帽每次作画时,都需 ...

  8. calc(NOIP模拟赛Round 3)

    原题: D e s c r i p t i o n 给三个正整数n,m和p,求(n^1+...n^m) mod p. Input 一行,三个整数n,m和p. Output 输出答案. S a m p ...

  9. noip模拟赛(10.4) 序列(sequence)

    序列(sequence) [题目描述] 给定一个1~n的排列x,每次你可以将x1~xi翻转.你需要求出将序列变为升序的最小操作次数.有多组数据. [输入数据] 第一行一个整数t表示数据组数. 每组数据 ...

随机推荐

  1. 笨小熊 南阳acm62

    笨小熊 时间限制:2000 ms  |  内存限制:65535 KB 难度:2   描述 笨小熊的词汇量很小,所以每次做英语选择题的时候都很头疼.但是他找到了一种方法,经试验证明,用这种方法去选择选项 ...

  2. 18 Django-组件拾遗

    一 Django的form组件 forms组件 二 Django的model form组件 这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把model和form组合起来,先来一个简单的 ...

  3. 5,pandas高级数据处理

    1.删除重复元素 使用duplicated()函数检测重复的行,返回元素为布尔类型的Series对象,每个元素对应一行,如果该行不是第一次出现,则元素为True - keep参数:指定保留哪一重复的行 ...

  4. WPF仿酷狗页面

    原文:WPF仿酷狗页面 版权声明:本文为博主原创文章,如需转载请标明转载地址 http://blog.csdn.net/u013981858 https://blog.csdn.net/u013981 ...

  5. Sql Server多种分页性能的比较

    一.前言 因为工作关系,遇到了非常大的数据量的分页问题,数据总共有8000万吧,这个显然不是简单的分页能够解决的,需要从多多方面考虑,从分表.分库等等.但是这个也让我考虑到了分页性能的问题,在不同数据 ...

  6. 通过学习制作长微博工具来了解水印的制作,及EditText中的内容在图片中换行显示

    长微博工具非常有用,140字的要求可能阻止你写更多的内容,于是长微博工具应运而生,虽然网上有很多长微博工具,但是我都不是很满意,所以自己想做一个,通过做这个长微博工具,我学习到了很多东西,有两个难点, ...

  7. WIN10把照片查看器设为默认看图软件

    WIN10默认是PHOTO,没有以前WIN7的照片查看器好用,要改回来的方法如下:   在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Photo ...

  8. 新建git仓库--留

    1.git config 配置配置息,查看配置信息

  9. ssh.sh_for_ubuntu1404

    #!/bin/bash sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/g' /etc/ssh/sshd_config s ...

  10. 使用puTTY或Xshell连接阿里云TimeOut超时

    根据网上很多主流的说法,我依次检查了 ssh: service sshd status 防火墙:service iptables stop (CentOS 7好像已经没有这个iptable了) 都没有 ...