Cod sursa(job #1947590)

Utilizator wilson182Alexandrina Panfil wilson182 Data 31 martie 2017 07:49:04
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include<bits/stdc++.h>
using namespace std;
const int N=100020;
int s[N], k[N];
int find(int x){
	int x1=x;
	while(x!=k[x])x=k[x];
	while(x1!=k[x1]){
		int y=x1;
		x1=k[x1];
		k[y]=x;
	}
	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]=k[a];
}
int main(){
	int t, x, y;
	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;
	}
	while(m--){
		scanf("%d%d%d", &t, &x, &y);
		if(t==1) unite(x, y);
		else{
		if(find(x)==find(y)) printf("DA\n");
		else printf("NU\n");
		}  
	}
}