Cod sursa(job #1784659)

Utilizator dominiciorgandaDominic Iorganda dominiciorganda Data 20 octombrie 2016 12:33:18
Problema Paduri de multimi disjuncte Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <cstdio>
using namespace std;
int f[100005],g[100005],k,i,x,m,j,ct,ok;
int cauta(int x)
{
    int k,i,m;
    for(k=x;f[k]!=k;k=f[k]);
    for(i=x;f[i]!=i;i=f[i])
        f[i]=k;
    return k;
}
void unire(int x,int y)
{
    int k,i,m;
    if(g[x]<g[y])
        swap(x,y);
    f[y]=x;
    g[x]+=g[y];

    g[y]=g[x];
}
int main()
{
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    scanf("%d%d",&x,&m);
    for(k=1;k<=x;k++)
    {
        f[k]=k;
        g[k]=1;
    }
    for(k=1;k<=m;k++)
    {
        scanf("%d%d%d",&ct,&i,&j);
        if(ct==2)
        {
            if(cauta(i)==cauta(j))
                printf("DA\n");
            else
                printf("NU\n");
            continue;
        }
        unire(i,j);
    }

    return 0;
}