2 条题解
-
0
#include<bits/stdc++.h> using namespace std; const int N=60; int n,a[N],b[N],fa[N],s[N]; int findfa(int x){ return (fa[x]==x)?fa[x]: fa[x]=findfa(fa[x]);} bool check(int x) { for(int i=1;i<=n;i++)fa[i]=i,s[i]=1; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { if((abs(a[i]-a[j])+abs(b[i]-b[j])+1)/2<=x) { int x=findfa(i),y=findfa(j); if(x!=y) { fa[x]=y; s[y]+=s[x]; if(s[y]==n)return 1; } } } return 0; } int main() { scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d%d",&a[i],&b[i]); int l=1,r=2e9,ans; while(l<=r) { int mid=(l+r)/2; if(check(mid))ans=mid,r=mid-1; else l=mid+1; } printf("%d",ans); return 0; } -
0
#include<bits/stdc++.h> using namespace std; const int N=60; int n,a[N],b[N],fa[N],s[N]; int findfa(int x){ return (fa[x]==x)?fa[x]: fa[x]=findfa(fa[x]);} bool check(int x) { for(int i=1;i<=n;i++)fa[i]=i,s[i]=1; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { if((abs(a[i]-a[j])+abs(b[i]-b[j])+1)/2<=x) { int x=findfa(i),y=findfa(j); if(x!=y) { fa[x]=y; s[y]+=s[x]; if(s[y]==n)return 1; } } } return 0; } int main() { scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d%d",&a[i],&b[i]); int l=1,r=2e9,ans; while(l<=r) { int mid=(l+r)/2; if(check(mid))ans=mid,r=mid-1; else l=mid+1; } printf("%d",ans); return 0; }
- 1
信息
- ID
- 1860
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 5
- 已通过
- 5
- 上传者