Cod sursa(job #1946556)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 30 martie 2017 10:42:54
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <cstdio>

using namespace std;
int v[100001];
int rad (int nod){
    while (v[nod]>0)
        nod=v[nod];
    return nod;
}
int main()
{
    FILE *fin=fopen ("disjoint.in","r");
    FILE *fout=fopen ("disjoint.out","w");
    int n,m,i,r1,r2,e1,e2,op,x,y;
    fscanf (fin,"%d%d",&n,&m);
    for (i=1;i<=n;i++)
        v[i]=-1;
    for (i=1;i<=m;i++){
        fscanf (fin,"%d%d%d",&op,&x,&y);
        r1=rad(x);
        r2=rad(y);
        if (op==1){
            if (r1!=r2){
                // nu sunt deja in aceeasi multime
                e1=-v[r1];
                e2=-v[r2];
                if (e1<e2){
                    v[r2]+=v[r1];
                    v[r1]=r2;
                }
                else {
                    v[r1]+=v[r2];
                    v[r2]=r1;
                }
            }
        }
        else {
            if (r1==r2)
                fprintf (fout,"DA\n");
            else fprintf (fout,"NU\n");
        }
    }
    return 0;
}