题(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表示数据组数. 每组数据 ...
随机推荐
- 图像的模糊-opencv
调用两个API,一个是均值模糊,一个是高斯模糊.如下所示: #include<opencv2/opencv.hpp> #include<iostream> using name ...
- python-3高级特征
1-切片 L = ["qinzb",'fengyong','bingyan'] L[0:3] #截取从索引0开始到索引3结束(不包含索引3) L[:3] #如果索引是从0开始则可省 ...
- HDFS HA 的 core-site.xml
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Licens ...
- Redmine部署到Windows Azure
有幸,今天可以尝试将Redmine部署到Windows Azure中,记下点滴,方便大家查阅 步骤一:Windows Azure中安装Ubuntu VM 遇到的问题,创建VM时会提示云服务.云存储订阅 ...
- USACO Section1.2 Transformations 解题报告
transform解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------ ...
- glup自动化构建工具
实现的功能包括 js压缩,css文件合并压缩并在html加版本号,压缩html文件 1.安装gulp 建议参考官网就行http://www.gulpjs.com.cn/docs/getting-sta ...
- Oracle 学习----:ora-00054 资源正忙 ,但指定以nowait方式获取资源 ,或者超时失效---解决方法
1.查询被锁的会话ID: select session_id from v$locked_object;查询结果:SESSION_ID-------92.查询上面会话的详细信息: SELECT sid ...
- 孤荷凌寒自学python第三十九天python 的线程锁Lock
孤荷凌寒自学python第三十九天python的线程锁Lock (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 当多个线程同时操作一个文件等需要同时操作某一对象的情况发生时,很有可能发生冲突, ...
- wireshark简单使用
过滤表达式的规则 表达式规则 1. 协议过滤 比如TCP,只显示TCP协议. ip.src == 219.216.87.200 and ip.dst==219.216.87.254 2 ...
- [译]如何将docker日志重定向到单个文件里
原文来源: how-to-redirect-docker-logs-to-a-single-file 问题: 我想把某一个docker的log全部导出到一个文件里进行分析,我该怎么做? 其实不用那样操 ...