Cod sursa(job #1632136)

Utilizator TibixbAndrei Tiberiu Tibixb Data 5 martie 2016 21:52:43
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<fstream>
using namespace std;
int t[100005], n, m, i, op, x, y, rx, ry, r;
int rad(int x)
{
    int y=x;
    while(t[x]>0)
        x=t[x];
    r=x;
    x=y;
    while(t[x]>0)
    {
        y=t[x];
        t[x]=r;
        x=y;
    }
    return r;
}
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int main()
{
    in>>n>>m;
    for(i=1; i<=n; i++)
        t[i]=-1;
    for(;m--;)
    {
        in>>op>>x>>y;
        rx=rad(x);
        ry=rad(y);
        if(op==1)
        {
            if(rx!=ry)
            {
                if(t[rx]<t[ry])
                {
                    t[rx]+=t[ry];
                    t[ry]=rx;
                }else
                {
                    t[ry]+=t[rx];
                    t[rx]=ry;
                }
            }
            continue;
        }
        rx==ry?out<<"DA\n":out<<"NU\n";
    }
    return 0;
}