Pagini recente » Cod sursa (job #968924) | Cod sursa (job #1895531) | Cod sursa (job #1987341) | Cod sursa (job #800254) | Cod sursa (job #2709187)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int NMAX = 100005;
int n,m,op,x,y;
int tata[NMAX], rang[NMAX];
int Find(int nod)
{
while(tata[nod] != nod)
nod = tata[nod];
return nod;
}
void Unite(int nod1,int nod2)
{
if(rang[nod1] < rang[nod2])
tata[nod1] = nod2;
if(rang[nod1] > rang[nod2])
tata[nod2] = nod1;
if(rang[nod1] == rang[nod2])
{
tata[nod1] = nod2;
rang[nod2]++;
}
}
void read()
{
fin >> n >> m;
for(int i = 1; i <= n; i++)
{
tata[i] = i;
rang[i] = 1;
}
for(int i = 1; i <= m; i++)
{
fin >> op >> x >>y;
if(op == 1)
{
Unite(Find(x),Find(y));
}
else
{
if(Find(x) == Find(y))
fout << "DA" << "\n";
else
fout << "NU" << "\n";
}
}
}
int main()
{
read();
return 0;
}