出现UB了,害怕
查看原帖
出现UB了,害怕
578628
Undead2008楼主2022/10/1 12:00
#include<bits/stdc++.h>
using namespace std;
#define inf 1000
int n,m,f[inf*inf],w[inf][inf],sz[inf*inf];
int sum,mxs_=1,mxs,x_,y_,ty;
int adj(int x,int y){return (y-1)*(m+2)+x+4;}
int ff(int x){return f[x]==x?x:f[x]=ff(f[x]);}
void merge(int x,int y){
	x=ff(x),y=ff(y);
	if(x!=y){
		f[x]=y;sum++;
		sz[y]+=sz[x];
		mxs_=max(mxs_,sz[y]);
	}
}
int check(int x,int y){
	x=ff(x),y=ff(y);
	if(x==y)return sz[x];
	else return sz[x]+sz[y];
}
int main(){
	cin>>m>>n;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			cin>>w[j][i];
			f[adj(j,i)]=adj(j,i);
			sz[adj(j,i)]=1;
		}	
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			if((w[j][i]&2)==0)	
				merge(adj(j,i),adj(j,i-1));
			if((w[j][i]&4)==0)	
				merge(adj(j,i),adj(j+1,i));
		}
	sum=n*m-sum;
	for(int j=1;j<=m;j++)
		for(int i=n;i>=1;i--){
			if((w[j][i]&2)){
				int k=check(adj(j,i),adj(j,i-1));
				if(mxs<k)x_=j,y_=i,mxs=k,ty=1;
			}
			if((w[j][i]&4)){
				int k=check(adj(j,i),adj(j+1,i));
				if(mxs<k)x_=j,y_=i,mxs=k,ty=2;
			}
		}
	cout<<sum<<'\n'<<mxs_<<'\n'<<mxs<<'\n'<<y_<<' '<<x_<<' ';
	cout<<(ty==1?'N':'E');
}

如题,这份代码不吸氧气RE+WA,吸氧AC,求教原理

2022/10/1 12:00
加载中...