Cod sursa(job #1795897)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 2 noiembrie 2016 22:19:31
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda cerculdeinfo-lectia5-paduri.heap.aib Marime 0.85 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MaxN 100005
using namespace std;
 
FILE *IN,*OUT;
 
int N,M,Type,X,Y,v[MaxN];
 
void Union(int x,int y)
{
    v[x]=y;
}
 
int Find(int x)
{
    int y=x,prev;
    while(y!=v[y])
        y=v[y];
    while(x!=v[x])
    {
        prev=v[x];
        v[x]=y;
        x=prev;
    }
    return y;
 
}
 
int main()
{
    IN=fopen("disjoint.in","r");
    OUT=fopen("disjoint.out","w");
 
    fscanf(IN,"%d%d",&N,&M);
    for(int i=1;i<=N;i++)
        v[i]=i;
    for(int i=1;i<=M;i++)
    {
        fscanf(IN,"%d%d%d",&Type,&X,&Y);
        if(Type==1)
        {
            Union(Find(X),Find(Y));
        }
        else
        {
            if(Find(Y)==Find(X))fprintf(OUT,"DA\n");
            else fprintf(OUT,"NU\n");
        }
    }
     
    return 0;
}