Cod sursa(job #1902072)

Utilizator virtualityBbbbbbbbbbbbbbbbbb virtuality Data 4 martie 2017 13:17:42
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include<bits/stdc++.h>
#define N 100020
using namespace std;
int k[N], s[N];
int find(int x){
	int r=x, y;
	while(x!=k[x])x=k[x];
	while(k[r]!=r){
		y=k[r];
		k[r]=x;
		r=y;
	}
	return x;
}
void unite(int a, int b){
	a=find(a);
	b=find(b);
	if(s[a]<s[b]) swap(a, b);
	s[a]+=s[b];
	k[b]=a;
}
int main(){
	int n, m;
	freopen("disjoint.in", "r", stdin);
	freopen("disjoint.out", "w", stdout);
	scanf("%d%d", &n, &m);
	for(int i=1;i<=n;i++){
		s[i]=1;
		k[i]=i;
	}
	int k, x, y;
	while(m--){
		scanf("%d%d%d", &k, &x, &y);
		if(k==1) unite(x, y);else{
			if(find(x)==find(y)) printf("DA\n"); else printf("NU\n");
		}
	}
	return 0;
}