Cod sursa(job #2200501)

Utilizator NaritaandreiCNAINarita Andrei NaritaandreiCNAI Data 1 mai 2018 16:59:17
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <stdio.h>
#include <algorithm>

using namespace std;
FILE *f,*g;

int t[100002], rang[100002];
int m,n;

int multime(int node)
{
   int r=node,aux;
   while(r!=t[r])
    r=t[r];
    while(node!=t[node])
    {
        aux=t[node];
        t[node]=r;
        node=aux;
    }
    return r;
}
void reuneste(int i,int j)
{   if(rang[i]>rang[j])
        t[j]=i;
    else
        t[i]=j;
    if(rang[j]==rang[i])
        rang[j]++;
}

int main()
{   int q=0,i,j,cost,rez=0,x;
    f=fopen("disjoint.in","r");
    g=fopen("disjoint.out","w");
    fscanf(f,"%d %d",&n,&m);
    for(int i=1; i<=n; i++)
    {
        t[i]=i;
        rang[i]=0;
    }
    for(int l=1; l<=m; l++)
    {
        fscanf(f,"%d %d %d",&x,&i,&j);
        if(x==1)
            reuneste(multime(i),multime(j));
        else
        {
            if(multime(i)==multime(j))
                fprintf(g,"DA\n");
            else
                fprintf(g,"NU\n");
        }
    }

    return 0;
}