没有输出!求调!
查看原帖
没有输出!求调!
1015977
heyZZZ楼主2024/7/2 15:35
#include<bits/stdc++.h>
using namespace std;
#define oo INT_MAX
//#define int long long
int n,mp[505][505],f[250005],s[250005],ans,tot;
struct stu{int u,v,w;}a[1000005];
bool cmp(stu a,stu b){return a.w<b.w;}
int c(int i,int j){return (i-1)*n+j;}
int fd(int x){
	if(x==f[x]) return x;
	return f[x]=fd(f[x]);
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>mp[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(i>1) a[++tot]={c(i,j),c(i-1,j),abs(mp[i-1][j]-mp[i][j])};
			if(j>1) a[++tot]={c(i,j),c(i,j-1),abs(mp[i][j-1]-mp[i][j])};
			if(i<n) a[++tot]={c(i,j),c(i+1,j),abs(mp[i+1][j]-mp[i][j])};
			if(j<n) a[++tot]={c(i,j),c(i,j+1),abs(mp[i][j+1]-mp[i][j])};
		}
	}
	for(int i=1;i<=n*n;i++){
		f[i]=i;
		s[i]=1;
	}
	sort(a+1,a+tot+1,cmp);
	for(int i=1;i<=tot;i++){
		if(fd(a[i].u)!=fd(a[i].v)){
			f[fd(a[i].u)]=fd(a[i].v);
			s[fd(a[i].v)]+=s[fd(a[i].u)];
			if(s[fd(a[i].v)]>=(n*n+1)/2){
				cout<<a[i].w<<'\n';
				return 0;
			}
		}
	}
}
2024/7/2 15:35
加载中...