Cod sursa(job #1368164)

Utilizator ZeBuGgErCasapu Andreas ZeBuGgEr Data 2 martie 2015 14:48:21
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include<stdio.h>

int tata[100001],vert[100001];

int main()
{
    FILE *fin,*fout;
    fin=fopen("disjoint.in","r");
    fout=fopen("disjoint.out","w");

    int n,m,t,x,y;
    fscanf(fin,"%d %d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        tata[i]=i;
        vert[i]=1;
    }
    for(int i=1;i<=m;i++)
    {
        fscanf(fin,"%d %d %d",&t,&x,&y);
        if(t==1)
        {
            while(tata[x]!=x)
            {
                x=tata[x];
            }

            while(tata[y]!=y)
            {
                y=tata[y];
            }

            if(vert[x]>vert[y])
            {
                vert[x]+=vert[y];
                tata[y]=x;
            }
            else
            {
                vert[y]+=vert[x];
                tata[x]=y;
            }
        }
        else
        {
            while(tata[x]!=x)
            {
                x=tata[x];
            }

            while(tata[y]!=y)
            {
                y=tata[y];
            }

            if(x==y)
            {
                fprintf(fout,"DA\n");
            }
            else
            {
                fprintf(fout,"NU\n");
            }
        }
    }
}