Cod sursa(job #1794281)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 1 noiembrie 2016 09:47:23
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 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;
}