WA求助!
查看原帖
WA求助!
695456
Yang_Chi楼主2024/1/21 15:47

帮同学求助道题,就A了第一个点。

#include<bits/stdc++.h>
using namespace std;
int n,cnt,ret,x[1010][1010],f[1000100],rk[1000100];
struct node{
	int u,v,w;
}a[1010000];
bool cmp(node a,node b){
	return a.w<b.w;
}int to(int i,int j){
	return (i-1)*n+j;
}int getfa(int x){
	if(x==f[x]){
		return x;
	}return f[x]=getfa(f[x]);
}void merge(int x,int y){
	f[getfa(x)]=getfa(y);
	rk[getfa(y)]+=rk[getfa(x)];
}int main(){
	scanf("%d",&n);
	for(int i=1;i<=n*n;i++){
		f[i]=i,rk[i]=1;
	}for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			scanf("%d",&x[i][j]);
		}
	}for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(i>1){
				a[++cnt].u=to(i,j),a[cnt].v=to(i-1,j),a[cnt].w=abs(x[i-1][j]-x[i][j]);
			}if(j>1){
				a[++cnt].u=to(i,j),a[cnt].v=to(i,j-1),a[cnt].w=abs(x[i][j-1]-x[i][j]);
			}if(i<n){
				a[++cnt].u=to(i,j),a[cnt].v=to(i+1,j),a[cnt].w=abs(x[i+1][j]-x[i][j]);
			}if(j<n){
				a[++cnt].u=to(i,j),a[cnt].v=to(i,j+1),a[cnt].w=abs(x[i][j+1]-x[i][j]);
			}
		}
	}sort(a+1,a+cnt+1,cmp);
	for(int i=1;i<=cnt;i++){
		if(getfa(a[i].u)!=getfa(a[i].v)){
			merge(a[i].u,a[i].v);
			if(rk[getfa(a[i].v)]>(n*n)/2){
				printf("%d",a[i].w);
				return 0;
			}
		}
	}return 0;
}
2024/1/21 15:47
加载中...