并查集模板

编写find函数

find函数赋值初值

合并操作为f[find(t2)]=find(t3),查找操作为if(find(p2)==find(p3))

代码

#include <bits/stdc++.h>
using namespace std;
int f[10010];
int find(int k)
{
  if(f[k]==k)
  return k;
  return f[k]=find(f[k]);
}
int main()
{
  int n,m;
  cin>>n>>m;
  for(int i=1;i<=n;i++)
  f[i]=i;
  while(m--)
  {
    int t1,t2,t3;
    cin>>t1>>t2>>t3;
    if(t1==1)
    f[find(t2)]=find(t3);
    else
    {
      if(find(t2)==find(t3))
      cout<<"Y\n";
      else
      cout<<"N\n";
    }
  }
}

一句话find函数

int find(int k)
{
    return f[k]==k?k:f[k]=find(f[k]);
}
posted @ 2018-11-05 15:58  baccano!  阅读(100)  评论(0编辑  收藏  举报