Cod sursa(job #1947588)

Utilizator wilson182Alexandrina Panfil wilson182 Data 31 martie 2017 07:45:11
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.63 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];
	find(b);
	find(a);
}
int main(){
	int n, m;
	ifstream f("disjoint.in");
	ofstream g("disjoint.out");
	f>>n>>m;
	for(int i=1;i<=n;i++){
		s[i]=1;
		k[i]=i;
	}
	while(m--){
		int t, x, y;
		f>>t>>x>>y;
		if(t==1) unite(x, y);
		else{
		if(find(x)==find(y)) g<<"DA"<<endl;
		else g<<"NU"<<endl;	
		}  
	}
}