Cod sursa(job #3193394)

Utilizator magicninjaJula Diana magicninja Data 14 ianuarie 2024 15:32:42
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int tata[100005], siz[100005], nxt[100005];
void unire(int x, int y){
	int sefx, sefy, i, aux;
	if(siz[x] < siz[y]){
		swap(x, y);
	}
	sefx = tata[x];
	sefy = tata[y];
	if(sefx != sefy){
		siz[x] += siz[y];
		i = y;
		do{
			tata[i] = sefx;
			i = nxt[i];
		}while(y != i);
		aux = nxt[y];
		nxt[y] = nxt[x];
		nxt[x] = aux;
	}
}
int main()
{
		int n, m, cer, x, y, i;
		cin >> n >> m;
		for(i = 0; i <= n; i++){
			tata[i] = i;
			siz[i] = 1;
			nxt[i] = i;
		}
		for(i = 0; i < m; i++){
			cin >> cer >> x >> y;
			if(cer == 2){
				if(tata[x] == tata[y]){
					cout << "DA\n";
				}
				else{
					cout << "NU\n";
				}
			}
			else{
				unire(x, y);
			}
		}
    return 0;
}