Cod sursa(job #1038397)

Utilizator miu_mik93FMI - Paduraru Miruna miu_mik93 Data 21 noiembrie 2013 14:34:30
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <assert.h>
#include <time.h>
#include <algorithm>
#include <vector>
#include <cstdio>
#include <cstring>
#include <fstream>
#include <queue>
#include<cstdlib>
using namespace std;
	
#define NMAX 100001

int v[NMAX], N, M;

int cauta(int x)
{
	while (v[x] != x)
	{
		x = v[x];
	}
	return x;
}

void reuniune(int x, int y)
{
	int x0, y0;
	x0 = cauta(x);
	y0 = cauta(y);
	v[y0] = x0;
}

int main()
{
    FILE *f = fopen("disjoint.in", "r");
    FILE *g = fopen("disjoint.out", "w");
     
    fscanf(f, "%d %d ", &N, &M);
 
    int i, x, y, cd;

	for (int i = 1; i <= N; i++)
		v[i] = i;

	for (int i = 1; i <= M; i++)
	{
		fscanf(f, "%d %d %d", &cd , &x, &y);
		if (cd == 2)
		{
			if (cauta(x) == cauta(y))
				fprintf(g, "DA\n");
			else
				fprintf(g, "NU\n");
		}
		else
			if (cd == 1)
			{
				reuniune(x, y);
			}
	}
	fclose(f); fclose(g);
    return 0;
}