Cod sursa(job #1037199)

Utilizator ArchazeyBaltatu Andrei-Mircea Archazey Data 19 noiembrie 2013 22:34:24
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include<iostream>
#include<fstream>
#include<cstdio>
using namespace std;

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

int n,m,tata[100005],nrnod[100000],t1,t2,op;

inline void Citire()
{
    fin>>n>>m;
}

inline void Union(int i,int j)
{
    if (nrnod[i]>nrnod[j])
        {
            tata[j]=i;
            nrnod[j]+=i;
        }
    else
        {
            tata[i]=j;
            nrnod[i]+=j;
        }
}

inline int Find(int x)
{
    int y,r,aux;
    r=x;
    while (tata[r]!=0)
        r=tata[r];
    y=x;
    while (y!=r)
        {
            aux=y;
            y=tata[y];
            tata[aux]=r;
        }
    return r;
}

inline void Rezolva()
{
    for (int i=1;i<=m;i++)
        {
            fin>>op>>t1>>t2;
            if (op==1)
                Union(Find(t1),Find(t2));
            else
                if (op==2)
                    {
                        if(Find(t1)==Find(t2))
                            fout<<"DA\n";
                        else fout<<"NU\n";
                    }
        }
}


int main()
{
    Citire();
    Rezolva();
    return 0;
}