ZJNU 1333 - 第二题 blocks--中高级
因为放一个就需要判断一次,每一次跑一遍全图bfs显然是不现实的
又因为点只有三种,黑白无
所以可以用并查集优化
添加一个棋子就判断周围四个的组别情况
注意出现的情况与答案关系之间的判别
#include<stdio.h>
#include<memory.h>
int N,M,dx[]={,,-,},dy[]={,,,-},gp[];
char cm[][];
int findp(int p){
return p==gp[p]?p:(gp[p]=findp(gp[p]));
}
int prime(int x,int y){
return x>=&&y>=&&x<N&&y<N;
}
int main(){
int i,j,X,Y,xx,yy,ans=,g,d1,d2;
char C;
memset(cm,'.',sizeof cm);
for(i=;i<;i++)
gp[i]=i;
scanf("%d%d",&N,&M);
for(i=;i<M;i++){
scanf("%*c%c%d%d",&C,&X,&Y);
ans++;
for(g=j=;j<;j++){
xx=X-+dx[j];
yy=Y-+dy[j];
if(prime(xx,yy)&&cm[xx][yy]==C){
d1=findp(gp[(X-)*N+(Y-)]);
d2=findp(gp[xx*N+yy]);
if(!g){//周围4个位置如果还没有找到一个同集合的,可以直接合并并减少一个答案组
g=;
if(d1!=d2){
if(d1<d2)
gp[d2]=d1;
else
gp[d1]=d2;
}
ans--;
}
else{//周围4个位置如果已经找到一个同组的了,只有两个点所在的集合不同时才需要合并并减少一个答案组
if(d1!=d2){
if(d1<d2)
gp[d2]=d1;
else
gp[d1]=d2;
ans--;
}
}
}
}
cm[X-][Y-]=C;
printf("%d\n",ans);
} return ;
}
ZJNU 1333 - 第二题 blocks--中高级的更多相关文章
- 05:统计单词数【NOIP2011复赛普及组第二题】
05:统计单词数 总时间限制: 1000ms 内存限制: 65536kB 描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次 ...
- 常见面试第二题之什么是Context
今天的面试题,也就是我们常见面试题系列的第二题,我们来讲一讲android中的context.我相信大家android开发者一定对于这个context非常熟悉,肯定都有使用过,肯定没有没使用过的.但是 ...
- 《学习OpenCV》练习题第五章第二题abc
代码: #include <stdio.h> #include <opencv/highgui.h> #include <opencv/cv.h> #include ...
- 《学习OpenCV》练习题第四章第二题
#include <highgui.h> #include <cv.h> #pragma comment (lib,"opencv_calib3d231d.lib&q ...
- CSDN挑战编程——《金色十月线上编程比赛第二题:解密》
金色十月线上编程比赛第二题:解密 题目详情: 小强是一名学生, 同一时候他也是一个黑客. 考试结束后不久.他吃惊的发现自己的高等数学科目竟然挂了,于是他果断入侵了学校教务部站点. 在入侵的过程中.他发 ...
- NOIP2005-普及组复赛-第二题-校门外的树
题目描述 Description 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0 ...
- 【gdoi2018 day2】第二题 滑稽子图(subgraph)(性质DP+多项式)
题目大意 [gdoi2018 day2]第二题 滑稽子图(subgraph) 给你一颗树\(T\),以及一个常数\(K\),对于\(T\)的点集\(V\)的子集\(S\). 定义\(f(S)\)为点集 ...
- 【LOJ#6066】「2017 山东一轮集训 Day3」第二题(哈希,二分)
[LOJ#6066]「2017 山东一轮集训 Day3」第二题(哈希,二分) 题面 LOJ 题解 要哈希是很显然的,那么就考虑哈希什么... 要找一个东西可以表示一棵树,所以我们找到了括号序列. 那么 ...
- test20181020 B君的第二题
题意 分析 考场70分 一看就是裸的kmp,直接打上去. #include<cstdlib> #include<cstdio> #include<cmath> #i ...
随机推荐
- 吴裕雄--天生自然C++语言学习笔记:C++ Web 编程
什么是 CGI? 公共网关接口(CGI),是一套标准,定义了信息是如何在 Web 服务器和客户端脚本之间进行交换的. CGI 规范目前是由 NCSA 维护的,NCSA 定义 CGI 如下: 公共网关接 ...
- Docker Java 例子
版权所有,未经许可,禁止转载 章节 Docker 介绍 Docker 和虚拟机的区别 Docker 安装 Docker Hub Docker 镜像(image) Docker 容器(container ...
- CF1209A Paint the Numbers
You are given a sequence of integers a1,a2,…,an. You need to paint elements in colors, so that: If w ...
- NIO前奏之Path、Files、AsynchronousFileChannel
NIO前奏之Path.Files.AsynchronousFileChannel Java 1.4加入了nio包,Java 1.7 加入了真正的AIO(异步IO),AsynchronousFile ...
- C语言预处理理论
C语言预处理理论1.从源码到可执行文件的过程(1)源码.c->(编译)->elf可执行程序(2)源码.c->(编译)->目标文件.o->(链接)->elf可执行程序 ...
- MySLQ排序后标记排行
查询排行及所有(表名.*) 1. ; AS top, customer.* FROM customer 2. AS top, customer.* ) r, customer ORDER BY cus ...
- 2020牛客寒假算法基础集训营5 部分题解(BDEH)
B: 牛牛战队的比赛地(二分做法)题意:二维平面给定n个点,在x轴找一点使得到n个点距离的最大值最小. 思路:我们可以将问题转化为在x轴找到一个圆心,使得该圆包含这n个点且半径最小,这样就变成了最小圆 ...
- DFS+BFS(广度优先搜索弥补深度优先搜索遍历漏洞求合格条件总数)--09--DFS+BFS--蓝桥杯剪邮票
题目描述 如下图, 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连) 比如,下面两张图中,粉红色所示部分就是合格的剪取. 请你计算,一共有多少 ...
- MySQL 字符集和校验规则工作流程
MySQL 字符集和校验规则工作原理 字符编码相关参数 数据流中的转码过程 校验规则 Tips:字符集和校验规则总是相伴的 一 从简单的建库语句开始 CREATE DATABASE [IF NOT E ...
- 2020PHP面试-Redis篇
一.Redis 数据类型 1. string 字符型. 2.hash hash 结构化的对象. key不可重复 3.list 队列 lpush rpop lpop rpush 4. set 集 ...