Link:

传送门

A:

贪心从小到大插入,用并查集维护连通性

#include <bits/stdc++.h>

using namespace std;
#define X first
#define Y second
typedef double db;
typedef long long ll;
typedef pair<int,int> P;
const int MAXN=1e3+10;
int n,tot,cnt,f[MAXN];P dat[MAXN];
struct edge{int x,y;ll w;}e[MAXN*MAXN];

ll sqr(int x){return 1ll*x*x;}
bool cmp(edge x,edge y){return x.w<y.w;}
int find(int x){return f[x]==x?x:f[x]=find(f[x]);}

int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d%d",&dat[i].X,&dat[i].Y),f[i]=i;
    for(int i=1;i<n;i++)
        for(int j=i+1;j<=n;j++)
            e[++tot]={i,j,sqr(dat[i].X-dat[j].X)+sqr(dat[i].Y-dat[j].Y)};
    sort(e+1,e+tot+1,cmp);
    
    cnt=n;
    for(int i=1;i<=tot;i++)
    {
        int px=find(e[i].x),py=find(e[i].y);
        if(px!=py) f[px]=py,cnt--;
        if(cnt==1) return printf("%lld",e[i].w),0;
    }
    return 0;
}
Problem A

相关文章:

  • 2022-12-23
  • 2021-12-26
  • 2022-01-29
  • 2021-12-26
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-19
猜你喜欢
  • 2021-10-06
  • 2021-08-09
  • 2021-10-18
  • 2021-12-01
  • 2021-10-13
  • 2021-09-26
  • 2021-09-25
相关资源
相似解决方案