Cod sursa(job #1463650)

Utilizator Tester01tester Tester01 Data 21 iulie 2015 13:59:51
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <bits/stdc++.h>
using namespace std;
#define Nmax 100013
int n,m,op,a,b;

class DisjointForest{
	private : 
	         int father[Nmax]; 
			 
			 int find(int node){
	         	if (node == father[node]) return node;
	         	return father[node] = find(father[node]);
	         }  
	public : 
            DisjointForest(int n) { for (int i=1;i<=n;++i) father[i]=i; }; 
 
	         void merge(int a,int b){
	         	int fa = find(a);
	         	int fb = find(b);
	         	father[fa]=fb;
	         }
	        
	       string check (int a,int b){
	          if (find(a)==find(b)) return "DA\n";
			  return "NU\n";	
	        } 
     }; 
     
int main(void) {
 ifstream cin("disjoint.in");
 ofstream cout("disjoint.out");
 cin>>n>>m; 
 DisjointForest Forest(n);
 while(m--){
 	cin>>op>>a>>b;
 	switch (op) {
	 case 1 : Forest.merge(a,b); break;
     case 2 : cout<<Forest.check(a,b); break;
      default : break;
      }
  }
 return 0;
}