Pagini recente » Cod sursa (job #2200044) | Cod sursa (job #207019) | Cod sursa (job #865053) | Cod sursa (job #2169477) | Cod sursa (job #3150236)
//
#include <bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
long long i, j, n, m, op, x, y, maxx, T[1000001], Rang[1000001];
int Radacina(int k){
if(T[k] == k)
return k;
else
{
int r = Radacina(T[k]);
T[k] = r;
return r;
}
}
void Unire(int k, int p)
{
int rk = Radacina(k), rp = Radacina(p);
if(rk != rp)
{
if(Rang[rk] > Rang[rp])
T[rp] = rk;
else
{
T[rk] = rp;
if(Rang[rk] == Rang[rp])
Rang[rp] ++;
}
}
}
int main()
{
fin>>n>>m;
for(i=1;i<=n;i++){
Rang[i]=1;
T[i]=i;
}
for(i=1;i<=m;i++)
{
fin>>op;
if(op==1){
fin>>x>>y;
Unire(x , y);
}else if(op==2){
fin>>x>>y;
if(T[Radacina(x)]==T[Radacina(y)]){
fout<<"DA"<<endl;
}else{
fout<<"NU"<<endl;
}
}
}
}