有控制并查集大小,可样例还是输出0。
#include<bits/stdc++.h>
using namespace std;
int n,m,pre[505],size[505],mp[505][505],t;
struct node{
int u,v,w;
};
vector<node>a;
int find(int x){
if(pre[x]==x)return x;
return pre[x]=find(pre[x]);
}
int un(int x,int y){
int fx=find(x),fy=find(y);
pre[fy]=fx;
size[fx]+=size[fy];
if(size[fx]>=t)return 1;
return 0;
}
int abs(int x){
if(x>0)return x;
return -x;
}
bool cmp(node a,node b){
return a.w<b.w;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>mp[i][j];
if(j!=1)
a.push_back(node{n*(i-1)+j-1,n*(i-1)+j,abs(mp[i][j]-mp[i][j-1])});
if(i!=1)
a.push_back(node{n*(i-2)+j,n*(i-1)+j,abs(mp[i][j]-mp[i-1][j])});
}
}
for(int i=1;i<=n;i++){pre[i]=i;size[i]=1;}
t=(n+1)/2;
sort(a.begin(),a.end(),cmp);
int i=0;
while(1){
if(find(a[i].u)!=find(a[i].v)){
if(un(a[i].u,a[i].v)){
cout<<a[i].w;
return 0;
}
}
i++;
}
return 0;
}
。。。。。。求助dalao