• poj 2236 并查集


    并查集水题

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cmath>
     6 #include<queue>
     7 using namespace std;
     8 int n,m,t;
     9 struct node
    10 {
    11     int x,y;
    12 }A[1005];
    13 int rank[1005],pre[1005];
    14 int dist(node A,node B)
    15 {
    16     return (A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y);
    17 }
    18 void init(int n)
    19 {
    20     for(int i=1;i<=n;i++)
    21     {
    22         rank[i]=1;
    23         pre[i]=i;
    24     }
    25 }
    26 int find(int x)
    27 {
    28     if(pre[x]!=x)    pre[x]=find(pre[x]);
    29     return pre[x];
    30 }
    31 void Union(int x,int y)
    32 {
    33     x=find(x);
    34     y=find(y);
    35     if(x==y)    return;
    36     if(rank[x]>=rank[y])
    37     {
    38         pre[y]=x;
    39         rank[x]+=rank[y];
    40     }
    41     else
    42     {
    43         pre[x]=y;
    44         rank[y]+=rank[x];
    45     }
    46 }
    47 int main()
    48 {
    49     int i,j,k;
    50     //freopen("1.in","r",stdin);
    51     scanf("%d",&n);
    52     init(n);
    53     scanf("%d",&k);
    54     for(i=1;i<=n;i++)   scanf("%d%d",&A[i].x,&A[i].y);
    55     char s[20];
    56     int aa[1005],tot=0;
    57     while(scanf("%s",s)!=EOF)
    58     {
    59         if(s[0]=='O')
    60         {
    61             int q;
    62             scanf("%d",&q);
    63             for(i=0;i<tot;i++)
    64             {
    65                 if(dist(A[aa[i]],A[q])<=k*k)
    66                 {
    67                    // printf("%d %d
    ",aa[i],q);
    68                     Union(aa[i],q);
    69                 }
    70             }
    71             aa[tot++]=q;
    72         }
    73         else
    74         {
    75             int p,q;
    76             scanf("%d%d",&p,&q);
    77             p=find(p);
    78             q=find(q);
    79             if(p==q)    printf("SUCCESS
    ");
    80             else printf("FAIL
    ");
    81         }
    82     }
    83     return 0;
    84 }
  • 相关阅读:
    Ynoi 杂题选做
    CSP-S2021 浙江 游记
    P6272 [湖北省队互测2014]没有人的算术
    P5206 [WC2019]数树
    P5405 [CTS2019]氪金手游
    LOJ6679 Unknow
    LOJ3040 「JOISC 2019 Day4」合并
    P6122 [NEERC2016]Mole Tunnels
    三维凸包
    三,四元环计数
  • 原文地址:https://www.cnblogs.com/cnblogs321114287/p/4266004.html
Copyright © 2020-2023  润新知