• 【模板】并查集


        洛谷P3367

    • 版本一  那时候的我大括号还换行qwq 

     1 #include<cstdio>
     2 #include<iostream>
     3 #define maxn 10010
     4 #define maxm 200020
     5 int f[maxn];
     6 int n,m;
     7 inline int find(int x)
     8 {
     9     if(x!=f[x]) f[x]=find(f[x]);
    10     return f[x];
    11 }
    12 inline void merge1(int u,int v)
    13 {
    14     int r1=find(u);
    15     int r2=find(v);
    16     if(r1!=r2)
    17     {
    18         f[r2]=r1;
    19     }
    20     return;
    21 }
    22 inline bool merge2(int u,int v)
    23 {
    24     int r1=find(u);
    25     int r2=find(v);
    26     if(r1!=r2)    return false;
    27     return true;
    28 }
    29 using namespace std;
    30 int main()
    31 {
    32     scanf("%d%d",&n,&m);
    33     for(int i=1;i<n;i++) f[i]=i;
    34     int pd,x,y;
    35     for(int i=1;i<=m;i++)
    36     {
    37         scanf("%d",&pd);
    38         if(pd==1)
    39         {
    40             scanf("%d%d",&x,&y);
    41             merge1(x,y);
    42         }
    43         else
    44         {
    45             scanf("%d%d",&x,&y);
    46             if(merge2(x,y)==true) cout<<"Y"<<endl;
    47             else cout<<"N"<<endl;
    48         }
    49     }
    50     return 0;
    51 }
    • 版本二 现在的我喜欢短短萌萌的代码qwq
    •    
    •  1  1 #include<cstdio>
       2  2 #include<iostream>
       3  3 #define maxn 10010
       4  4 #define maxm 200020
       5  5 using namespace std;
       6  6 int f[maxn];
       7  7 int n,m,x,y,z;
       8  8 bool pd = 0;
       9  9 void init(int s) {for(int i = 1; i <= s; i++) f[i] = i;}
      10 10 int find(int x) {
      11 11     if(x != f[x]) f[x] = find(f[x]);
      12 12     return f[x];
      13 13 }
      14 14 void merge(int r1, int r2) {f[r2] = r1;}
      15 15 int main() {
      16 16     scanf("%d%d",&n,&m);
      17 17     init(n);
      18 18     for(int i = 1; i <= m; i++) {
      19 19         scanf("%d%d%d",&z,&x,&y);
      20 20         int f1 = find(x), f2 = find(y);
      21 21         if(z == 1)  merge(f1,f2);
      22 22         else (f1 == f2)?printf("Y
      "):printf("N
      ");//原来一直不喜欢用:? 当然现在也不喜欢qwq 
      23 23     }    
      24 24     return 0;
      25 25 }
    • 洛谷提交破千万啦!撒花!
    • 让我们一起祝贺洛谷长大啦!是个大宝宝啦!
    总之岁月漫长,然而值得期待。
  • 相关阅读:
    JS实现 div拖拽 限制在屏幕内
    国际化配置simple_form
    simple_form模板templates erb haml
    git rolify
    rails模板生成bootstrap格式的simple_form的erb文件
    rails生成器生成自定义controller模板
    ubuntu 终端常用命令(转)
    Ruby for Rails笔记
    Java基础
    javascript ybmiaov
  • 原文地址:https://www.cnblogs.com/Hwjia/p/9511576.html
Copyright © 2020-2023  润新知