Cod sursa(job #2930491)

Utilizator CondoracheAlexandruCondorache Alexandru CondoracheAlexandru Data 28 octombrie 2022 15:46:45
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.95 kb
//#include <bits/stdc++.h>
//#define ll long long
//using namespace std;
//const int maxn=1e5+5;
//ifstream fin("grader_test6.in");
////ofstream fout("disjoint.out");
//int parent[maxn],rang[maxn];
// int find(int node){
// 	if(parent[node]==node){
// 		return node;
//	}
//	int ans=find(parent[node]);
//	parent[node]=ans;
//	return ans;	
// }
// void merge(int x, int y){
//    int xset = find(x);
//    int yset = find(y);
//    if (xset == yset)
//        return;
//    if (rang[xset] < rang[yset]) {
//        parent[xset] = yset;
//    }
//    else if (rang[xset] > rang[yset]) {
//        parent[yset] = xset;
//    }
//    else {
//        parent[yset] = xset;
//        rang[xset] = rang[xset] + 1;
//    }
//}
// int main(){
// 	ios_base::sync_with_stdio(false);
//	cin.tie(NULL);
//	int n,m;
//	fin >> n >> m;
//	for(int i=0;i<n;i++){
//		parent[i+1]=i+1;
//	}
//	for(int i=0;i<m;i++){
//		int cod,x,y;
//		fin >> cod >> x >> y;
//		if(cod==1) merge(x,y);
//		else{
//			if(find(x)==find(y)) cout << "DA" << endl;
//			else cout << "NU" << endl;	
//		}
//	}
// 	return 0;
//}
#include <bits/stdc++.h>
using namespace std;

ifstream in("disjoint.in");
ofstream out("disjoint.out");

const int N=1e5 +5;

int rang[N],tata[N];

int radacina(int nod)
{
    if(tata[nod] == nod) return nod;
    int x = radacina(tata[nod]);
    tata[nod] = x;
    return x;
}

void reuniune(int x, int y)
{
    int rad1=radacina(x),rad2=radacina(y);

     if(rang[rad1] > rang[rad2]) tata[rad2] = rad1;
     else
     {
         tata[rad1] = rad2;
         if(rang[rad1] == rang[rad2]) rang[rad2]++;
     }
}


int main()
{
    int n,m; in>>n>>m;

    for(int i=1;i<=n;i++) tata[i]=i;

    for(int i=1;i<=m;i++)
    {
        int tip,x,y; in>>tip>>x>>y;

        if(tip == 1) reuniune(x,y);
        else
        {
            if(radacina(x) == radacina(y)) out<<"DA\n";
        else out<<"NU\n";
        }
    }
}