Cod sursa(job #1827336)

Utilizator pas.andreiPopovici Andrei-Sorin pas.andrei Data 11 decembrie 2016 19:03:31
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <cstdio>
#include <iostream>
#include <queue>
#include <vector>
#include <fstream>
#include <algorithm>
#include <string>
#include <iomanip>
#include <cstring>
#include <map>
#include <iomanip>
#include <unordered_map>
#include <stack>
#include <bitset>
#include <cctype>
#define MOD 8192
#define pb push_back
#define INF 0x3f3f3f3f
#define INFLL (1LL*INF*INF)
#define N 2000000002LL
#define ll long long
#define NMAX 100005
#define LOGMAX 19

using namespace std;

typedef pair<int, int> pii;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

int p[NMAX];

int findSet(int x) {
	if(p[x]==x) return x;

	return p[x]=findSet(p[x]);
}

bool inSameSet(int x, int y) {
	return (findSet(x) == findSet(y));
}

void unionSet(int x, int y) {
	if(!inSameSet(x,y)) {
		int a=findSet(x);
		int b=findSet(y);
		p[a]=b;
	}
}

int main() {
    int n,m,i,op,x,y;

	fin>>n>>m;

	for(i=1;i<=n;++i) p[i]=i;

	for(i=1;i<=m;++i) {
		fin>>op>>x>>y;

		if(op==1) {
			unionSet(x,y);
		}
		else {
			if(inSameSet(x,y)) fout<<"DA\n";
			else fout<<"NU\n";
		}
	}

    return 0;
}