题(NOIP模拟赛Round #10)
题目描述:
有一张的地图,其中
的地方是墙,
的地方是路。有两种操作:
给出
个地点,询问这
个地点中活动空间最大的编号。若询问的位置是墙,则活动空间为
;否则活动空间为询问地点通过四联通能到达的点的个数。如果有多个位置均为最大,输出给出顺序较前的那个。编号为
- 给出
个地点,按照读入的顺序翻转这
个地点的地形。即若原位置是墙,则该位置变为路;若原位置是路,则该位置变为墙。保证在将路变为墙时不会将一个区域分割,也不会将一个只有一格的区域填满。
保证每次操作只会询问或修改同一个位置至多一次。
————————————————我是分割线————————————————
首先我们先将一块连通的区域变为一个点,便于处理
接着我们来看修改操作:
如果一个点本来不联通,变成了连通,我们就有可能遇到两个区域连通的情况,所以我们要用并查集处理合并操作,并且合并的点不能在原图之上,要新开一个点。
但如果一个点变成墙,我们先将这个点所属的区块的压缩点的值-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)的更多相关文章
- 水(NOIP模拟赛Round #10)
题目描述: 小Z有一个长度为的数列.他有次令人窒息的操作,每次操作可以使某个数字或.他当然是希望这些数字的乘积尽量小了.为了简化题目,你只需输出操作完成后的数列即可. ———————————————— ...
- 大(NOIP模拟赛Round #10)
题目描述: 小Z有个n个点的高清大图,每个点有且只有一条单向边的出边.现在你可以翻转其中的一些边,使他从任何一个点都不能通过一些道路走回这个点.为了方便,你只需输出方案数对取模即可.当在两个方案中有任 ...
- NOIP模拟赛-2018.10.22
模拟赛 今天第一节课是历史,当然是不可能上的,一来到机房发现今天高二考试... 老师说以后可能还要给高一考...那还不如现在跟着做好了,毕竟在学长学姐中垫底显得没那么丢人 这套题风格挺奇怪的...为什 ...
- NOIP模拟赛 17.10.10
初次见面(firstmeet)[题目背景]雾之湖边,静得可怕.露米娅出神凝望.黑白连衣裙,像极了绽放的墨黑和洁白的莲.身边的雾之湖,倒映着血色天空.酒红的双眸,映照一切.低声浅笑,双臂伸直,她悄无声息 ...
- bananahill(NOIP模拟赛Round 8)
题目描述 香蕉川由座香蕉山组成,第i座山有它的高度.小Z准备从左到右爬这里的恰好座香蕉山,但他不希望山的高度起伏太大,太过颠簸,会让本就体育不好的他过于劳累.所以他定义了爬山的劳累度是所有爬的相邻的两 ...
- 战斗机的祈雨仪式(NOIP模拟赛Round 7)
[问题描述] 炎炎夏日,如果没有一场大雨怎么才能尽兴?秋之国的人民准备了一场祈雨仪式.战斗机由于拥有操纵雷电的能力,所以也加入了其中,为此,她进行了一番准备. 战斗机需要给自己的Spear of Lo ...
- 小红帽的画笔(NOIP模拟赛Round 7)
又到了神奇的模拟赛时间~ 真是丧~ 好吧我们来看看题目 小红帽是Pop star上最著名的人类画家,她可以将任何画出的东西变成真实的物品.赋予她这样神奇能力的正是她手上的画笔. 小红帽每次作画时,都需 ...
- 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 ...
- noip模拟赛(10.4) 序列(sequence)
序列(sequence) [题目描述] 给定一个1~n的排列x,每次你可以将x1~xi翻转.你需要求出将序列变为升序的最小操作次数.有多组数据. [输入数据] 第一行一个整数t表示数据组数. 每组数据 ...
随机推荐
- No module named 'PyQt5.sip'
使用pyinstaller打包python文件为windows可执行程序可能遇到的问题 pyinstaller yourprogram.py打包的程序双击打开一闪而过,提示上面标题的错误 把pycom ...
- Eclipse+Tomcat7.0+MySQL 连接池设置
http://blog.sina.com.cn/s/blog_85d71fb70101ab99.html 工程名:JavaWeb 第一步:配置server.xml 在Tomcat的server.xml ...
- Android面试收集录4 Fragment详解
1.什么是Fragment? 你可以简单的理解为,Fragment是显示在Activity中的Activity. 它可以显示在Activity中,然后它也可以显示出一些内容. 因为它拥有自己的生命周期 ...
- 自定义控件的getChildCount
我真的是一步一步走过来,看过来的代码.不是能力问题,而是他们用的,我没用过,我用的他们不用.然后一句一句的问为什么,然后一句一句的去想为什么. 只有这样,才能慢慢的熟悉,东一榔头西一棒子,不是分模块再 ...
- 顺序查找&二分查找&索引查找
1.查找技术的分类.如下图: 2.什么是顺序查找呢?(无序表) 顺序查找的原理很简单,就是遍历整个列表,逐个进行记录的关键字与给定值比较,若某个记录的关键字和给定值相等,则查找成功,找到所查的记录.如 ...
- laravel5.5事件广播系统
目录 1. 定义广播事件 1.1 广播名称 1.2 广播数据 1.3 广播队列 1.4 广播条件 2. 频道授权 2.1 定义授权路由 2.2 定义授权回调 3. 对事件进行广播 3.1 可以使用ev ...
- css改变光标
<span style="cursor:auto"> Auto</span><br /> <span style="cursor ...
- 孤荷凌寒自学python第四十三天python 的线程同步之Queue对象
孤荷凌寒自学python第四十三天python的线程同步之Queue对象 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) Queue对象是直接操作队列池的对象,队列中可以存放多种对象,当然也 ...
- Codeforces Round #326(Div2)
CodeForces 588A 题意:Duff喜欢吃肉,想在接下来的n天,每天都有Ai斤肉吃,但每一天肉的单价Pi不定,肉 可以保存不过期,现已知n天每天肉的斤数Ai,以及单价Pi,为了使每天都 ...
- jquery select chosen禁用某一项option
$("#tbParBudCode").chosen().change(function () { $("#tbParBudCode option[value='" ...