Cod sursa(job #1894012)

Utilizator edi_laitinLaitin Eduard edi_laitin Data 26 februarie 2017 13:08:37
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int TT[100005],N,M,R[100005];
int Father(int nod)
{
    while(nod!=TT[nod])
    {
        nod=TT[nod];
    }
   return nod;
}
void Unite(int x,int y)
{
    if(R[x]>R[y])
        TT[y]=x;
    else
        TT[x]=y;
    if(R[x]==R[y])
        R[y]++;
}
void Solve()
{
    fin>>N>>M;
   for(int i=1;i<=N;i++)
   {
       TT[i]=i;
       R[i]=1;
   }
   for(int i=1;i<=M;i++)
   {
       int c,x,y;
      fin>>c>>x>>y;
        if(c==1)
        {
            Unite(Father(x),Father(y));
        }
        if(c==2)
        {
            if(Father(x)==Father(y))
                fout<<"DA"<<"\n";
            else
                fout<<"NU"<<"\n";
        }
   }
}
int main()
{
    Solve();
    return 0;
}