并查集

模板题–洛谷P3367

代码

#include<bits/stdc++.h>
using namespace std;

const int MAXN=(int)1e4+10;
int pre[MAXN];

int find(int x);
void merge(int x,int y);

int main()
{
  int n,m;
  cin>>n>>m;
  for (int i=1;i<=n;i++) {
    pre[i]=i;
  }
  while (m--) {
    int z,x,y;
    scanf("%d%d%d",&z,&x,&y);
    if (z==1) {
      merge(x,y);
    } else {
      int fx=find(x),fy=find(y);
      printf("%c\n","NY"[fx==fy]);
    }
  }
  return 0;
}

int find(int x)
{
  return x==pre[x] ? x : pre[x]=find(pre[x]);
}

void merge(int x,int y)
{
  pre[find(x)]=find(y);
}

留下评论