记录编号 461616 评测结果 AAAAAAAA
题目名称 城堡 最终得分 100
用户昵称 Gravatarliuyu 是否通过 通过
代码语言 C++ 运行时间 0.010 s
提交时间 2017-10-20 09:50:34 内存使用 0.40 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;

int n,m,ss[60][60],f[10100],sum[10100];
int ans1,ans2=1,ans3,s,t,x,y,ans4=0;
char c;

int find(int x){
	return f[x]==x ? x:f[x]=find(f[x]);
}

struct ed{
	int fr,to;
};
vector<ed>v;

bool cmp(ed a,ed b){
	int ax,ay,bx,by;
	ax=a.fr/100,ay=a.fr%100;
	bx=b.fr/100,by=b.fr%100;
	if(ay!=by)return ay<by;
	if(ax!=bx)return ax>bx;
	ax=a.to/100,ay=a.to%100;
	bx=b.to/100,by=b.to%100;
	if(ay!=by)return ay<by;
	return ax>bx;
}

int main(){
	freopen("castle.in","r",stdin);
	freopen("castle.out","w",stdout);
	ios::sync_with_stdio(false);
	cin>>m>>n;
	ans1=n*m;ans2=1;
	for(int i=1;i<=9999;i++)f[i]=i,sum[i]=1;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			cin>>ss[i][j];
			int a=ss[i][j],u,r;//cout<<ss[i][j]<<" "<<a<<endl;
			u=i*100+(j-1);r=i*100+j;
			if(!(a&1)&&j-1){
				s=find(u),t=find(r);
				if(s!=t){f[s]=t;sum[t]+=sum[s];ans1--;ans4++;ans2=max(ans2,sum[t]);}
			}
			else if(j-1)v.push_back((ed){u,r});
			a>>=1;
			
			u=(i-1)*100+j;
			if(!(a&1)&&i-1){
				s=find(u),t=find(r);
				if(s!=t){f[s]=t;sum[t]+=sum[s];ans1--;ans4++;ans2=max(ans2,sum[t]);}
			}
			else if(i-1)v.push_back((ed){r,u});
			a>>=1;
			
			u=i*100+(j+1);
			if(!(a&1)&&j+1<=m){
				s=find(u),t=find(r);
				if(s!=t){f[s]=t;sum[t]+=sum[s];ans1--;ans4++;ans2=max(ans2,sum[t]);}
			}
			else if(j+1<=m)v.push_back((ed){r,u});
			a>>=1;
			
			u=(i+1)*100+j;
			if(!(a&1)&&i+1<=n){
				s=find(u),t=find(r);
				if(s!=t){f[s]=t;sum[t]+=sum[s];ans1--;ans4++;ans2=max(ans2,sum[t]);}
			}
			else if(i+1<=n)v.push_back((ed){u,r});
		}
	sort(v.begin(),v.end(),cmp);
	for(int i=0;i<v.size();i++){
		s=find(v[i].fr),t=find(v[i].to);
		if(s!=t&&ans3<sum[s]+sum[t]){
			//cout<<sum[s]<<" "<<sum[t]<<endl;
			ans3=sum[s]+sum[t];
			x=v[i].fr/100;
			y=v[i].fr%100;
			int a=v[i].to/100,b=v[i].to%100;
			if(x-1==a)c='N';
			if(y+1==b)c='E';
		}
	}
	cout<<ans1<<endl<<ans2<<endl<<ans3<<endl<<x<<" "<<y<<" "<<c<<endl;
	return 0;
}