Cod sursa(job #2644439)

Utilizator lucian2015blaugranadevil lucian2015 Data 24 august 2020 17:00:58
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
#include <vector>
using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");
const int nmax = 100001;

int n , m;
vector<int parent(nmax + 4,0);
vector<int> nr(nmax + 4,0);	
int radacina(int x){
	if(parent[x] == 0){
		return x;
	}
	parent[x] = radacina(parent[x]);
   return parent[x];
}

void union1(int x, int y){
  int radx = radacina(x);
  int rady = radacina(y);
  if( radx == rady){
  	  return;
  }
   if( nr[x] > nr[y]){
   		parent[rady] = radx;
   		nr[radx] += nr[rady]; 
   }
   else{
   	    parent[radx] = rady;
   		nr[rady] += nr[radx]; 
   }
}

int main(){

	int x, y, cond;
	f >> n >> m;
	for(int i = 0 ; i <= n; i++){
		nr[i] = 1;
	}
	for(int i = 0 ; i < m; i++){
		f >> cond >> x >> y;
		if( cond == 1){
		  union1(x,y);
		}
		else{
			if(radacina(x) == radacina(y)){
				g <<"DA"<<"\n";
			}
			else{
				g << "NU"<<"\n";
			}

		}
	}
}