悬关求调,真不知道怎么错的
  • 板块P1661 扩散
  • 楼主icaijy
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/6/17 20:25
  • 上次更新2024/6/17 20:55:57
查看原帖
悬关求调,真不知道怎么错的
378195
icaijy楼主2024/6/17 20:25
#include <bits/stdc++.h>
//#define int long long
using namespace std;
struct dsu{
	int a[100005],num;
	void init(int n){
		for (int i=1;i<=n;i++){
			a[i]=i;
		}
		num=n;
	}
	int find(int x){
		if (a[x]!=x) {
			a[x]=find(a[x]);
		}
		return a[x];
	}
	void u(int x,int y){
		x=find(x);
		y=find(y);
		if (x!=y) {
			a[x]=y;
			num--;
		}
	}
};
pair<int,int> a[55];
int n;
dsu d;
bool check(int t){
	for (int i=2;i<=n;i++){
		for (int j=1;j<i;j++) {
			if (abs(a[i].first-a[j].first)+abs(a[i].second-a[j].second)<=2*t) d.u(i,j);
		}
	}
	return d.num==1;
}
signed main(){
	cin>>n;
	for (int i=1;i<=n;i++){
		cin>>a[i].first>>a[i].second;
	}
	int ans;
	int l=1,r=1000000,mid;
	while (l<=r) {
		d.init(n);
		mid=(l+r)/2;
		if (check(mid)){
			ans=mid;
			r=mid-1;
		}
		else l=mid+1;
	}
	cout<<ans;
	return 0;
}

自己目前发现是check的问题,别的地方没有问题,真的不理解

2024/6/17 20:25
加载中...