Pagini recente » Cod sursa (job #2718319) | Cod sursa (job #2982393) | Clasament jjaa | Cod sursa (job #2615739) | Cod sursa (job #2807413)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int par[100005]; // vector pentru parinti
int dim[100005]; //cat de multe noduri sunt in arborele respectiv
int find_radacina(int x)
{
vector <int> met;
while(x!=par[x]) //parcurgem cat timp x are parinte
{
x=par[x];
met.push_back(x);
}
for(auto el:met)
{
par[el] = x;
}
return x;
}
void unite(int a, int b)
{
int x = find_radacina(a);
int y = find_radacina(b);
if(dim[x] > dim[y]) //unim arborele mai mic de arborele mai mare
{
par[y] = x;
dim[x]+=dim[y];
}
else
{
par[x] = y;
dim[y] += dim[x];
}
}
/*
void init()
{
int n;
for(int i=1; i<=n; ++i)
{
par[i]=i;
dim[i]=1;
}
} */
int main()
{
int n, m;
fin>> n >> m;
for(int i=1; i<=n; i++)
{
par[i] = i;
}
while (m--)
{
int cod, a, b;
fin>> cod >> a >> b;
if(cod == 1)
{
unite(a,b);
}
else
{
if(find_radacina(a) == find_radacina(b))
fout << "DA\n";
else
fout << "NU\n";
}
}
return 0;
}