正题


题目大意

在一个n*n的棋盘上进行m此操作。在一个格子上放一个黑或白的棋子。多个相连的同色棋子形成一个连通块,求每次操作后求连通块数。


解题思路

并查集表示连通,然后每次扩展,如果有同色的就连通,注意判断已经是同一个连通块的情况。


代码

#include<cstdio>
using namespace std;
int n,m,s,c,x,y,color[601][601],father[250001];
int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1};
int find(int x)
{return x==father[x]?x:find(father[x]);}
//找祖先
int number(int x,int y)
{return (x-1)*n+y;}//求号
bool unionn(int x,int y)
{int fa=find(x),fb=find(y);if (fa==fb) return 0;if (fa<fb) father[fb]=fa;else father[fa]=fb;return 1;
}//相连并放回是否已经在同一连通块
int main()
{//freopen("blocks.in","r",stdin);f//reopen("blocks.out","w",stdout);scanf("%d%d",&n,&m);for (int i=1;i<=n*n;i++) father[i]=i;s=0;for (int i=1;i<=m;i++){scanf("%d %d %d",&c,&x,&y);c++;color[x][y]=c;//标记s++;//连通块增加for (int k=0;k<4;k++){int zx=x+dx[k],zy=y+dy[k];if (zx>0&&zx<=n&&zy>0&&zy<=n&&color[x][y]==color[zx][zy]){if(unionn(number(x,y),number(zx,zy)))s--;//合并(注意判断是否在同一连通块)}}printf("%d\n",s);}
}

对拍

随机数据与暴力

#include<cstdio>
#include<ctime>
#include<cstdlib>
#include<string>
#include<iostream>
#include<map>
#define random(x) rand()%x+1
using namespace std;
int n,m,s,color[501][501],c,x,y,e[501][501];
bool f[501][501];
void bfs(int x,int y,int c,int w)
{if (x>n || y>n || x<1 || y<1 || color[x][y]>c || !color[x][y])return;if (f[x][y] || e[x][y]!=w) return;f[x][y]=true;bfs(x+1,y,c,w);bfs(x-1,y,c,w);bfs(x,y+1,c,w);bfs(x,y-1,c,w);
}
int main()
{freopen("blocks.in","w",stdout);srand((unsigned)time(0));n=random(500);m=random(n*n);printf("%d %d\n",n,m);for (int i=1;i<=m;i++){c=random(2)-1;x=random(n);y=random(n);while (color[x][y]){x=random(n);y=random(n);}printf("%d %d %d\n",c,x,y);color[x][y]=i;e[x][y]=c;}fclose(stdout);freopen("blocks.ans","w",stdout);for (int k=1;k<=m;k++){memset(f,0,sizeof(f));s=0;for (int i=1;i<=n;i++)for (int j=1;j<=n;j++)if (!f[i][j] && color[i][j]<=k && color[i][j]){bfs(i,j,k,e[i][j]);s++;}printf("%d\n",s);}fclose(stdout);
}

对拍

#include<cstdio>
#include<ctime>
#include<cstdlib>
#include<cstring>
using namespace std;
int main()
{for (int t=1;t<=100000;t++){system("blocksdata.exe");double st=clock();system("blocks.exe");double ed=clock();if (system("fc blocks.out blocks.ans")){printf("WA");return 0;}elseprintf("AC point:%d time:%.0lfms\n",t,ed-st);}
}

【2018.5.12】模拟赛之三-ssl2415 连通块【并查集】相关推荐

  1. 计蒜客蓝桥杯模拟赛5 引爆炸弹【并查集】

    在一个 n×m 的方格地图上,某些方格上放置着炸弹.手动引爆一个炸弹以后,炸弹会把炸弹所在的行和列上的所有炸弹引爆,被引爆的炸弹又能引爆其他炸弹,这样连锁下去. 现在为了引爆地图上的所有炸弹,需要手动 ...

  2. 2018.10.9模拟赛

    2018.10.9模拟赛 T1 trade 正解:贪心 据说lyd讲过但并没有印象QAQ,考场上现推浪费了不少时间 其实就开个小根堆,每次把堆顶取出来看它是不是比当前的 a[i]a[i]a[i] 小, ...

  3. 挑战 渣打科营“Mini Code Marathon”赛题:连通块最少

    package csdn; /** * 渣打科营"Mini Code Marathon"赛题:连通块最少 * @author Cheeps * 思路:在同一个全1连通块中,任何两个 ...

  4. 2017乌鲁木齐区域赛I(带权并查集)

    #include<bits/stdc++.h> using namespace std; int f[200010];//代表元 long long rl[200010];//记rl[i] ...

  5. 中石油训练赛 - 奎奎画画(思维+并查集+离线处理)

    题目描述 "为你写诗,为你静止,为你做不可能的事",爱情是一种怪事,它让奎奎开始学习画画.奎奎认为一张画的艺术价值等于画上的白色联通块个数(当一个格子和它上下左右四个方向上的某个相 ...

  6. jzoj5904. 【NOIP2018模拟10.15】刺客信条(并查集)

    5904. [NOIP2018模拟10.15]刺客信条 Description 故事发生在1486 年的意大利,Ezio 原本只是一个文艺复兴时期的贵族,后来因为家族成员受到圣殿骑士的杀害,决心成为一 ...

  7. 【2018.3.17】模拟赛之三-ssl1863jzoj1367 俄罗斯方块【模拟】

    正题 链接 需要纪中OJ账号 有7种方块 有n列,给出每列的方块高度,求一种方块所有方面都落地的方案数 输入输出(需要自取) Input 第一行为二个整数C和P,1 ≤ C ≤ 100, 1 ≤ P ...

  8. 【2018.5.19】模拟赛之三-ssl2434 取数【搜索,卡常或记忆化搜索】

    正题 题目大意 有n*m的数字矩阵,要求每次只能往相邻的格子移动并取数,要求取数的顺序是一个等差的上升序列.求最多能移动多少步 解题思路 过法: 爆搜卡常 做法: 记忆化用f[i][j][k]表示在第 ...

  9. 【2018.4.21】模拟赛之三-ssl2404 上学【深度优先搜索】

    正题 大意 有n个点,m辆车,每辆车有开车时间,需要走多久和需要多少钱.求在t个时间单位内到达可以需要花掉的最少价格 解题思路 暴力搜索能过就对了 代码 #include<cstdio> ...

最新文章

  1. asp.net模态窗口返回值
  2. “轻量级的”Istio,微软开源了一个基于 Envoy 的服务网格
  3. 配置vivado用vscode编辑文本
  4. vs 中使用32 位mysql_【转载】VS中MFC连接MySQL由于系统不同位(32/64)引起的错误:无法解析的外部符号 _mysql_init@4、_mysql_query...
  5. 10次课( find命令、文件名后缀)
  6. DiscuzX模板制作-主题列表页_左边栏制作_V1
  7. 8051蜂鸣器程序c语言,单片机驱动蜂鸣器C51程序
  8. Android Framework 音频子系统(02)音频系统框架
  9. axure中继器案例
  10. Android内存优化深入解析
  11. app 上架到苹果应用商店
  12. pytorch中保存、载入权重
  13. librtmp的简单安装使用
  14. 2021-07-31-DJ-009 Django模板页面的继承与定制,一个Base.html,仿制漂亮的效果
  15. 第十四周 任务一
  16. 用JAVA实现简单的WORD转PDF 亲测有效
  17. 优达数据分析课程免费分享
  18. 古人对梦的解释_梦见古人如何解释梦意_周公解梦梦到古人如何解释梦意是什么意思_做梦梦见古人如何解释梦意好不好...
  19. 《论文阅读》ChatGPT相关技术之思维链(CoT in LLMs)
  20. 20个月股票投资经验全面总结,买格力电器也能亏钱,牛逼企业的股票,竟然由傻瓜在定价

热门文章

  1. 计算机Word应用程序,Word2007目录设置_计算机软件和应用程序_IT /计算机_信息
  2. 怎么把c语言转换汇编程序,如何把汇编语言转换成C语言
  3. helm安装postgres_添加到postgres数据库外的keycloak k8s helm chart环境参数
  4. 家用简单电线路图_家庭配电箱接线图解 家用配电箱安装方法
  5. 剑指offer——01二维数组中的查找.
  6. 算法设计与分析——回溯法——n皇后问题
  7. 算法 - DFS/BFS
  8. leetcode860. 柠檬水找零
  9. 7-3 作业调度算法--高响应比优先 (40 分)(思路+详解+vector容器做法)Come Baby!!!!!
  10. 关于导入c3p0-0.9.5.5.jar包引发NoClassDefFoundError、ClassNotFoundException