Cod sursa(job #871242)

Utilizator andreas_mihAndreas Mihaloianis andreas_mih Data 4 februarie 2013 17:10:39
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<stdio.h>
#include<vector>
using namespace std;
FILE*in=fopen("disjoint.in","r");
FILE*out=fopen("disjoint.out","w");
int noduri,query,boss[100001],nod;
int parcurge(int nod)
{
    if(boss[nod]==nod)
        return nod;
    else
        return (boss[nod]=parcurge(boss[nod]));
}
int main()
{
    fscanf(in,"%d%d",&noduri,&query);
    for(int i=1;i<=noduri;++i)
        boss[i]=i;
     for(int i=0;i<query;++i)
    {
        int tip,nod1,nod2;
        fscanf(in,"%d",&tip);
        fscanf(in,"%d%d",&nod1,&nod2);
        if(tip==1)
            boss[parcurge(nod2)]=parcurge(nod1);
        else
            if(parcurge(boss[nod1])==parcurge(boss[nod2]))
                fprintf(out,"DA\n");
            else
                fprintf(out,"NU\n");
    }



fclose(in);
fclose(out);
return 0;
}