hdu5652:India and China Origins(并查集)
倒序操作用并查集判断是否连通,新技能get√(其实以前就会了
这题细节很多。。。搞得整个程序都是调试输出,几度看不下去想要重写
并查集到现在大概掌握了两个基本用途:判断是否连通 / 路径压缩(上一篇blog)UPD:判断某个区间是否被覆盖
- #include<iostream>
- #include<cstdlib>
- #include<cstring>
- #include<cstdio>
- #define ll long long
- using namespace std;
- const int dx[]={,,,-,},dy[]={,,,,-},maxn=;
- int n,m,china,india,T,q,fa[maxn],x[maxn],y[maxn];
- bool v[][],map[][],map2[][];
- char s[maxn];
- void read(int &k)
- {
- int f=;k=;char c=getchar();
- while(c<''||c>'')c=='-'&&(f=-),c=getchar();
- while(c<=''&&c>='')k=k*+c-'',c=getchar();
- k*=f;
- }
- int gf(int x){return fa[x]==x?x:fa[x]=gf(fa[x]);}
- int bh(int x,int y)
- {
- if(x==)return n*m+;
- if(x==n+)return n*m+;
- return (x-)*m+y;
- }
- void dfs(int x,int y)
- {
- v[x][y]=;
- for(int i=;i<=;i++)
- {
- int nx=x+dx[i],ny=y+dy[i];
- if(nx>n||nx<||ny>m||ny<)continue;
- if((!v[nx][ny])&&(!map[nx][ny])&&(!map2[nx][ny]))
- fa[gf(bh(nx,ny))]=gf(bh(x,y)),dfs(nx,ny);
- }
- }
- int main()
- {
- read(T);
- while(T--)
- {
- memset(v,,sizeof(v));
- memset(map,,sizeof(map));
- memset(map2,,sizeof(map2));
- read(n);read(m);china=n*m+;india=n*m+;
- for(int i=;i<=n;i++)
- {
- scanf("%s",s);
- for(int j=;j<m;j++)
- map[i][j+]=s[j]-'';
- }
- read(q);
- for(int i=;i<=q;i++)
- {
- read(x[i]);read(y[i]);
- x[i]++;y[i]++;
- map2[x[i]][y[i]]=;
- }
- for(int i=;i<=n*m+;i++)fa[i]=i;
- for(int i=;i<=m;i++)
- if((!map[][i])&&(!v[][i])&&(!map2[][i]))fa[gf(bh(,i))]=gf(china),dfs(,i);
- for(int i=;i<=m;i++)
- if((!map[n][i])&&(!v[n][i])&&(!map2[n][i]))fa[gf(bh(n,i))]=gf(india),dfs(n,i);
- for(int i=;i<=n;i++)for(int j=;j<=m;j++)
- if((!map[i][j])&&(!v[i][j])&&(!map2[i][j]))dfs(i,j);
- if(gf(china)==gf(india))printf("-1\n");
- else
- for(int i=q;i;i--)
- {
- map2[x[i]][y[i]]=;
- for(int j=;j<=;j++)
- if((!map[x[i]+dx[j]][y[i]+dy[j]])&&(!map2[x[i]+dx[j]][y[i]+dy[j]]))
- fa[gf(bh(x[i]+dx[j],y[i]+dy[j]))]=gf(bh(x[i],y[i]));
- if(gf(china)==gf(india))
- {
- printf("%d\n",i);
- break;
- }
- }
- }
- return ;
- }
hdu5652:India and China Origins(并查集)的更多相关文章
- hdu5652 India and China Origins(并查集)
India and China Origins Accepts: 49 Submissions: 426 Time Limit: 2000/2000 MS (Java/Others) Memo ...
- hdu 5652 India and China Origins 并查集+二分
India and China Origins Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/ ...
- hdu 5652 India and China Origins 并查集
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5652 题目大意:n*m的矩阵上,0为平原,1为山.q个询问,第i个询问给定坐标xi,yi,表示i年后这 ...
- hdu 5652 India and China Origins 并查集+逆序
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5652 题意:一张n*m个格子的点,0表示可走,1表示堵塞.每个节点都是四方向走.开始输入初始状态方格, ...
- hdu-5652 India and China Origins(二分+bfs判断连通)
题目链接: India and China Origins Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65536/65536 K ...
- 并查集(逆序处理):HDU 5652 India and China Origins
India and China Origins Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/ ...
- HDU 5652 India and China Origins(并查集)
India and China Origins Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/ ...
- HDU 5652 India and China Origins 二分+并查集
India and China Origins 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5652 Description A long time ...
- HDU 5652 India and China Origins(经典并查集)
特别经典的一个题,还有一种方法就是二分+bfs 题意:空间内n*m个点,每个点是0或者1,0代表此点可以走,1代表不能走.接着经过q年,每年一个坐标表示此点不能走.问哪年开始图上不能出现最上边不能到达 ...
随机推荐
- lesson 20 pioneer pilots
lesson 20 Pioneer pilots driver pilot rider cyclist 骑自行车的人 介词后不加that cover + 距离 = travel 了一段距离 by su ...
- 前端开发工程师 - 02.JavaScript程序设计 - 第1章.基础篇
第1章--基础篇 JS介绍 html 网页的内容:css 网页的样式:javascript 网页的行为 i.e. hello world <!DOCTYPE html> <html& ...
- 【sessionInfo】使用说明
对象:sessionInfo 说明:会话类型操作,此对象是session与cookies的完善版,解决了session异常丢失及cookies文件大小的问题. 注意: 1) 访客的IP地址发生变化时 ...
- PNG和PVR之间互相转换的脚本
项目经常会将png和pvr之间互相转换,这里mark一个脚本,会将当前目录下的文件全部批量转换 png转换成pvr @echo off path %path%;"C:\Program Fil ...
- ThreadLocal 线程的私有内存
话说在<操作系统原理>这门课里面,我们学到了很多概念:进程.线程.锁.PV操作.读写者问题等等,大家还记得么?(估计有些概念早已忘记了吧,哈哈哈~) 其中关于进程.线程和锁的东西是我们平时 ...
- centos+nginx+redmine+gitosis安装指南
说明 这篇文章我现在的主要目的是记录自己安装redmine和gitosis的过程,可能写的有些糙,请各位读者见谅.我会在后面的时间里逐渐完善细节.但我想,这已经是网上迄今为止国内最详细的nginx+r ...
- vuejs学习之 项目打包之后的首屏加载优化
vuejs学习之 项目打包之后的首屏加载优化 一:使用CDN资源 我们在打包时,会将package.json里,dependencies对象里插件打包起来,我们可以将其中的一些使用cdn的方式加载,例 ...
- 阿里云搭建bind服务,外网ip不能用来解析问题解决
options { listen-on port 53 { any; }; //端口开放any listen-on-v6 port 53 { ::1; }; directory "/var/ ...
- svn服务器 备份,迁移,部署方案
这次做业务迁移,要从一个云厂商迁移到某云厂商,之前每天到全备svn排到用场了,需要搭建一个全新到svn服务并要做迁移,并实现我们开发机到时时代码同步 一.svn备份有很多种,优劣都不同,百度可查,我采 ...
- Python—集合(在我的世界,你就是唯一)
一.概念与定义 集合类型与数学中集合的概念一致,即包含0个或多个数据项的无序组合. 元素不可重复,只能是固定数据类型元素. 集合(set)属于Python无序可变序列,使用一对大括号作为定界符,元素之 ...