Cod sursa(job #2206215)

Utilizator daniel.vbVasile Daniel daniel.vb Data 21 mai 2018 19:22:42
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<stdio.h>


int x[100005],t[100005],nr[100005],n,m;


int cauta(int x)
{
    int i=x;

    while(t[x]!=x)
    {
        x=t[x];
    }
    t[i]=x;
    return x;
}


int main()
{
    FILE *f,*g;
    int i,x,y,tx,ty,o;

    f=fopen("disjoint.in","r");
    g=fopen("disjoint.out","w");

    fscanf(f,"%d %d",&n,&m);

    for(i=1;i<=n;i++)
    {
        nr[i]=1;
        t[i]=i;
    }

    for(i=1;i<=m;i++)
    {
        fscanf(f,"%d%d%d",&o,&x,&y);
        if(o==1)
        {
            tx=cauta(x);
            ty=cauta(y);
            if(tx<ty)
            {
                t[tx]=ty;
                nr[ty]+=tx;
            }
            else
            {
                t[ty]=tx;
                nr[tx]+=ty;
            }
        }
        if(o==2)
        {
            tx=cauta(x);
            ty=cauta(y);
            if(tx==ty)
                fprintf(g,"DA\n");
            else
                fprintf(g,"NU\n");
        }
    }
}