记录编号 129673 评测结果 MMMM
题目名称 加法问题 最终得分 0
用户昵称 GravatarRP++ 是否通过 未通过
代码语言 C++ 运行时间 0.000 s
提交时间 2014-10-20 17:59:36 内存使用 0.00 MiB
显示代码纯文本
#include<queue>
#include<cstdio>
using namespace std;
char ch[1501][1501];
int father[2250001],ans[1501][1501];
int a[5]={0,1,-1,0,0};
int b[5]={0,0,0,1,-1};
bool flag[1501][1501];
int h,l,h1,h2,r1,r2,s,t,x,y;;
queue<int>qa1,qa2,qb1,qb2,q1,q2;
inline int find(int x){
	if(x!=father[x])father[x]=find(father[x]);
	return father[x];
}
inline int my_max(int a,int b){
	if(a>b)return a;
	else return b;
}
int main(){
	freopen("aplusb.in","r",stdin);
	freopen("aplusb.out","w",stdout);
	scanf("%d%d",&h,&l);
	for(int i=1;i<=h;i++)	
		for(int j=1;j<=l;j++){
			ch[i][j]=getchar();
			if(ch[i][j]=='\n')ch[i][j]=getchar();
			if(ch[i][j]=='X')continue;
			if(ch[i][j]=='L'){
				if(!h1){
						qa1.push(i),qa2.push(j);
						h1=(i-1)*l+j;
				}
				else{
						qb1.push(i),qb2.push(j);
						h2=(i-1)*l+j;
				}
			}
			ch[i][j]='.';
			q1.push(i),q2.push(j);
		}
	for(int i=1;i<=h*l;i++)father[i]=i;
	while(!qa1.empty()){
		x=qa1.front();
		y=qa2.front();
		qa1.pop(),qa2.pop();
		r1=find((x-1)*l+y);
		for(int i=1;i<=4;i++){
			s=x+a[i],t=y+b[i];
			if(ch[s][t]=='.'&&!flag[s][t]){
				flag[s][t]=true;
				r2=find((s-1)*l+t);
				if(r1!=r2)father[r2]=r1;
				qa1.push(s),qa2.push(t);
			}
		}
	}
	while(!qb1.empty()){
		x=qb1.front();
		y=qb2.front();
		r1=find((x-1)*l+y);
		qb1.pop(),qb2.pop();
		for(int i=1;i<=4;i++){
			s=x+a[i],t=y+b[i];
			if((ch[s][t]=='.')&&(!flag[s][t])){
				flag[s][t]=true;
				r2=find((s-1)*l+t);
				if(r1!=r2)father[r2]=r1;
				qb1.push(s),qb2.push(t);
			}
		}
	}
	while(1){
		x=q1.front(),y=q2.front();
		q1.pop(),q2.pop();
		r1=find((x-1)*l+y);
		for(int i=1;i<=4;i++){
			s=x+a[i],t=y+b[i];
			if(s<=0||t<=0||s>h||t>l)continue;
			r2=find((s-1)*l+t);
			if(r1!=r2)father[r2]=r1;
			if(ch[s][t]=='X'){
				q1.push(s),q2.push(t);
				ans[s][t]=ans[x][y]+1;
				ch[s][t]='.';
			}
			else{
				if(find(h1)==find(h2)){
					printf("%d",my_max(ans[x][y],ans[s][t]));
					return 0;
				}
			}
		}
	}
}