Cod sursa(job #527160)

Utilizator APOCALYPTODragos APOCALYPTO Data 30 ianuarie 2011 18:38:28
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
using namespace std;
#include<iostream>
#include<fstream>

ofstream fout("disjoint.out");
#define nmax 100005

int T[nmax],N,M,r[nmax];
int find(int x)
{int R,y;
    for(R=x;R!=T[R];R=T[R]);
    for(;x!=T[x];)
    {
        y=T[x];
        T[x]=R;
        x=y;
    }

    return R;
}


void unite(int x,int y)
{
    if(r[x]>r[y])
       T[y]=x;
       else T[x]=y;
    if(r[x]==r[y]) r[y]++;


}
void init()
{int i;
    for(i=1;i<=N;i++)
    {
        T[i]=i;
        r[i]=1;

    }
}

void cit()
{
    ifstream fin("disjoint.in");

    fin>>N>>M;
    int i,x,y,z;
    init();
    for(i=1;i<=M;i++)
    {
        fin>>x>>y>>z;
        if(x==1)
        {
            unite(find(y),find(z));
        }
        else
        {
            if(find(y)==find(z))
            {
                fout<<"DA\n";

            }
            else
            fout<<"NU\n";
        }
    }

    fin.close();
}

int main()
{
    cit();


    fout.close();
    return 0;
}