Cod sursa(job #1232276)

Utilizator OnimushaLordTiberiu Copaciu OnimushaLord Data 22 septembrie 2014 17:08:03
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
# include <cstdio>
# include <fstream>
# include <iostream>
# include <vector>
# include <cstring>
# include <cctype>
# include <algorithm>
# include <cmath>
# define sz size()
# define bg begin()
# define ed end()
# define pb push_back
# define N 100010

using namespace std;

int x,y,i,n,q,op,xx,yy;
int R[N],T[N];

int find(int x)
{
    if(T[x]!=x) T[x]=find(T[x]);
    return T[x];
}
void reuneste(int x, int y)
{
    if(R[x]>R[y]) T[y]=x;
    else T[x]=y;
    if(R[x]==R[y]) R[x]++;
}
int main()
{
	freopen("disjoint.in", "r", stdin);
	freopen("disjoint.out", "w", stdout);

    scanf("%d %d\n", &n, &q);
    for(i=1; i<=n; ++i)
    {
        T[i]=i;
        R[i]=1;
    }
    for(i=1; i<=q; ++i)
    {
        scanf("%d %d %d\n", &op, &x, &y);
        xx=find(x); yy=find(y);
        if(op==1) reuneste(xx,yy);
        else if(T[xx]==T[yy]) printf("DA\n");
        else printf("NU\n");
    }

	fclose(stdin);
	fclose(stdout);
	return 0;
}