India and China Origins

Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 676    Accepted Submission(s): 227

Problem Description
A
long time ago there are no himalayas between India and China, the both
cultures are frequently exchanged and are kept in sync at that time, but
eventually himalayas rise up. With that at first the communation
started to reduce and eventually died.

Let's
assume from my crude drawing that the only way to reaching from India
to China or viceversa is through that grid, blue portion is the ocean
and people haven't yet invented the ship. and the yellow portion is
desert and has ghosts roaming around so people can't travel that way.
and the black portions are the location which have mountains and white
portions are plateau which are suitable for travelling. moutains are
very big to get to the top, height of these mountains is infinite. So if
there is mountain between two white portions you can't travel by
climbing the mountain.
And at each step people can go to 4 adjacent positions.

Our
archeologists have taken sample of each mountain and estimated at which
point they rise up at that place. So given the times at which each
mountains rised up you have to tell at which time the communication
between India and China got completely cut off.

 
Input
There are multi test cases. the first line is a sinle integer T which represents the number of test cases.

For each test case, the first line contains two space seperated integers N,M. next N lines consists of strings composed of 0,1 characters. 1 denoting that there's already a mountain at that place, 0 denoting the plateau. on N+2 line there will be an integer Q denoting the number of mountains that rised up in the order of times. Next Q lines contain 2 space seperated integers X,Y denoting that at ith year a mountain rised up at location X,Y.

T≤10

1≤N≤500

1≤M≤500

1≤Q≤N∗M

0≤X<N

0≤Y<M

 
Output
Single line at which year the communication got cut off.

print -1 if these two countries still connected in the end.

Hint:

From the picture above, we can see that China and India have no communication since 4th year.

 
Sample Input
1
4 6
011010
000010
100001
001000
7
0 3
1 5
1 3
0 0
1 2
2 4
2 1
 
Sample Output
4
  这题感觉怎么搞都可以,二分也可以AC,我用的是官方题解提到的并查集。
  由于并查集不便于分开集合,应当考虑逆序处理。
 #include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn=;
int fa[maxn];
bool out[maxn];
int X[maxn],Y[maxn];
int map[][];
char s[];
int find(int x){
return fa[x]==x?x:fa[x]=find(fa[x]);
} int main(){
int T,R,C,m;
scanf("%d",&T);
while(T--){
scanf("%d%d",&R,&C);
for(int i=C+;i<=(R+)*C;i++)fa[i]=i;
for(int i=;i<=C;i++)fa[i]=;
for(int i=C*(R+)+;i<=C*(R+);i++)fa[i]=C*(R+)+; for(int i=;i<=R;i++){
scanf("%s",s+);
for(int j=;j<=C;j++)
map[i][j]=s[j]-'';
} scanf("%d",&m);
for(int i=;i<=m;i++){
scanf("%d%d",&X[i],&Y[i]);X[i]++;Y[i]++;
map[X[i]][Y[i]]=;
} for(int i=;i<=R;i++)
for(int j=;j<C;j++){
if(map[i][j])continue;
if(map[i-][j]==)fa[find((i-)*C+j)]=find(i*C+j);
if(map[i+][j]==)fa[find((i+)*C+j)]=find(i*C+j);
if(map[i][j+]==)fa[find(i*C+j+)]=find(i*C+j);
if(map[i][j-]==)fa[find(i*C+j-)]=find(i*C+j);
} int ans=;
for(int i=m;i>=;i--){
if(find()==find(C*(R+)+)){
ans=i+;
break;
}
map[X[i]][Y[i]]=;
if(map[X[i]-][Y[i]]==)fa[find((X[i]-)*C+Y[i])]=find(X[i]*C+Y[i]);
if(map[X[i]+][Y[i]]==)fa[find((X[i]+)*C+Y[i])]=find(X[i]*C+Y[i]);
if(map[X[i]][Y[i]+]==)fa[find(X[i]*C+Y[i]+)]=find(X[i]*C+Y[i]);
if(map[X[i]][Y[i]-]==)fa[find(X[i]*C+Y[i]-)]=find(X[i]*C+Y[i]);
}
if(ans==m+)
printf("-1\n");
else
printf("%d\n",ans);
}
return ;
}

并查集(逆序处理):HDU 5652 India and China Origins的更多相关文章

  1. hdu 5652 India and China Origins 并查集+二分

    India and China Origins Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/ ...

  2. HDU 5652 India and China Origins 二分+并查集

    India and China Origins 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5652 Description A long time ...

  3. HDU 5652 India and China Origins(并查集)

    India and China Origins Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/ ...

  4. hdu 5652 India and China Origins 并查集+逆序

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5652 题意:一张n*m个格子的点,0表示可走,1表示堵塞.每个节点都是四方向走.开始输入初始状态方格, ...

  5. hdu 5652 India and China Origins 并查集

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5652 题目大意:n*m的矩阵上,0为平原,1为山.q个询问,第i个询问给定坐标xi,yi,表示i年后这 ...

  6. HDU 5652 India and China Origins(经典并查集)

    特别经典的一个题,还有一种方法就是二分+bfs 题意:空间内n*m个点,每个点是0或者1,0代表此点可以走,1代表不能走.接着经过q年,每年一个坐标表示此点不能走.问哪年开始图上不能出现最上边不能到达 ...

  7. hdu 5652 India and China Origins(二分+bfs || 并查集)BestCoder Round #77 (div.2)

    题意: 给一个n*m的矩阵作为地图,0为通路,1为阻碍.只能向上下左右四个方向走.每一年会在一个通路上长出一个阻碍,求第几年最上面一行与最下面一行会被隔开. 输入: 首行一个整数t,表示共有t组数据. ...

  8. (hdu)5652 India and China Origins 二分+dfs

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5652 Problem Description A long time ago there ...

  9. hdu 5652 India and China Origins 二分+bfs

    题目链接 给一个图, 由01组成, 1不能走. 给q个操作, 每个操作将一个点变为1, 问至少多少个操作之后, 图的上方和下方不联通. 二分操作, 然后bfs判联通就好了. #include < ...

随机推荐

  1. O2O的理解

    O2O 就是把线上和线下的优势完美结合,网上优惠价格,线下享受贴身服务!O2O 还可以实现不同商家的联盟 两年前的微博营销,现在没落了,那么微信营销呢,只能说来的太快了.线上来筛选服务和产品,所有的交 ...

  2. .net 安装Swagger

    官网:http://swagger.io/ 教程:http://www.wmpratt.com/swagger-and-asp-net-web-api-part-1/ 1:安装Dll: https:/ ...

  3. (转)[开发笔记]-js判断用户的浏览设备是移动设备还是PC

    <script type="text/javascript"> function browserRedirect() { var sUserAgent = naviga ...

  4. angularjs 利用filter进行表单查询及分页查询

    页面: <div> <input style="width:90%;margin-left:5px;margin-right:5px;" class=" ...

  5. POJ2584 T-Shirt Gumbo 二分图匹配(网络流)

    #include <cstdio> #include <cstring> #include <algorithm> const int inf=0x3f3f3f3f ...

  6. SGU 197.Nice Patterns Strike Back

    时间限制:0.5s 空间限制:6M 题意: 给出长n(n<=10^100)和宽m(m<=5)的地面,铺上黑色和白色的地板,使得没有任意一个2*2大小的地面铺同种颜色的方案数是多少. Sol ...

  7. winform 窗体大小变化时,如何设置使控件一起按照比例变大

    public Form() { InitializeComponent(); + ; float[] factor = new float[count]; ; factor[i++] = Size.W ...

  8. cocod2d-x 之 HelloWorld

    cocos2d-x 2.2创建项目 进入cocos2d-x-2.2/tools/project-creator,运行命令 python create_project.py -project MyGam ...

  9. C语言知识总结

    明白一些变量 熟悉一些语句 组合一些函数 C语言——>库  帮你写好放在库中 魔数 凭空变出来的数字,不知道 数字表示的含义,影响代码的可读性. C语音的参数传递 非常特殊,传递的是一个替身. ...

  10. iptables的设置

    一.filter表防火墙(过滤器) iptables -A ( INPUT OUTPUT ) -s 192.1680.1.200 -p ( TCP UDP ICMP ) -i ( eth0 eth1 ...