Cod sursa(job #1451573)

Utilizator ggokGeri Gokaj ggok Data 17 iunie 2015 18:10:16
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <iostream>
#include<fstream>
using namespace std;
int N;
int Q;
int p[100001];
int sz[100001],op,x,y;
int fin(int a)
{
    while(a!=p[a])
        a=p[a];
        p[a]=a;
    	return a;
}
bool sameset(int a,int b)
{
    int k=fin(a);
    int j=fin(b);
    if(k==j)
    return true;
    return false;
}
void uni(int a,int b)
{
    int k=fin(a);
    int j=fin(b);
    p[k]=j;
}
int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
  cin>>N>>Q;
  for(int i=1;i<=N;i++)
    p[i]=i,sz[i]=1;
  while(Q--)
  {
      cin>>op;
      cin>>x>>y;
      if(op==1)
      {
          if(!sameset(x,y))
            uni(x,y);
      }
      if(op==2)
      {
          if(sameset(x,y))
            cout<<"DA \n";
else          cout<<"NU \n";
      }
  }


  return 0;
}