Cod sursa(job #2928081)
| Utilizator | Data | 22 octombrie 2022 10:22:27 | |
|---|---|---|---|
| Problema | Paduri de multimi disjuncte | Scor | 40 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 1.02 kb |
#include<iostream>
using namespace std;
const int NMAX = 1e5 + 1;
int t[NMAX];//t[i] = tatal lui i,daca t[i] = 0,i e fatherless
void unite(int a,int b)
{
int root = b;
while(t[root])
{
root = t[root];
}
t[root] = a;
}
bool find(int a,int b)
{
int ra = a,rb = b;
while(t[ra]) ra = t[ra];
while(t[rb]) rb = t[rb];
return (ra == rb);
}
int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
int n,q,a,b,t;
cin >> n >> q;
while(q--)
{
cin >> t >> a >> b;
if(t & 1)
{
unite(a,b);
}
else
{
if(find(a,b))
{
cout << "DA\n";
}
else
{
cout << "NU\n";
}
}
}
}
