【並查集模板】並查集模板 luogu-3367
阿新 • • 發佈:2018-09-12
isdigit har dig n個元素 space ++ esp using 整數
題目描述
簡單的並查集模板
輸入描述
第一行包含兩個整數N、M,表示共有N個元素和M個操作。
接下來M行,每行包含三個整數Zi、Xi、Yi
當Zi=1時,將Xi與Yi所在的集合合並
當Zi=2時,輸出Xi與Yi是否在同一集合內,是的話輸出Y;否則話輸出N。
分析
簡單的模板,解釋留到算法微解讀
AC代碼
#include <bits/stdc++.h> using namespace std; int n,m; int fa[10000+5]; inline int read(){ int X=0,w=0; char ch; while (!isdigit(ch)) {w|=ch=='0'; ch=getchar();} while (isdigit(ch)) {X=(X<<3)+(X<<1)+(ch^48);ch=getchar();} return w?-X:X; } int gf(int x) { if (fa[x]==x) return fa[x]; else return fa[x]=gf(fa[x]); } int main() { n=read(),m=read(); for (int i=1;i<=n;i++) fa[i]=i; while (m--) { int x=read(),y=read(),z=read(),p1=gf(y),p2=gf(z); if (x==2) { if (p1==p2) printf("Y\n"); else printf("N\n"); } else if (p1!=p2) fa[p1]=p2; } return 0; }
【並查集模板】並查集模板 luogu-3367