Cod sursa(job #1554226)

Utilizator cristinelulCristian Virga cristinelul Data 21 decembrie 2015 09:35:20
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>

using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

int n,m,ad[100001],tata[100001];
void op1(int x,int y)
{
    while(tata[x]!=0)
        x=tata[x];
    while(tata[y]!=0)
        y=tata[y];
    if(ad[x]==ad[y])
    {
        ad[x]++;
        tata[y]=x;
    }
    else
    {
        if(ad[x]>ad[y])
            tata[y]=x;
        else
            tata[x]=y;
    }
}
int op2(int x,int y)
{
    while(tata[x]!=0)
        x=tata[x];
    while(tata[y]!=0)
        y=tata[y];
    if(x==y)
        return 1;
    else
        return 0;
}
void citire()
{
    int i,a,x,y;
    fin>>n>>m;
    for(i=1;i<=m;i++)
    {
        fin>>a>>x>>y;
        if(a==1)
            op1(x,y);
        else
        {
            if(op2(x,y)==1)
                fout<<"DA"<<'\n';
            else
                fout<<"NU"<<'\n';
        }
    }
}
int main()
{
    citire();
    fout.close();
    return 0;
}