Pagini recente » Istoria paginii runda/oji201756 | Cod sursa (job #2024190) | Istoria paginii runda/hertzalaiiii/clasament | Istoria paginii runda/nimic_suspect./clasament | Cod sursa (job #1650318)
#include <iostream>
#include <fstream>
#define nmax 100001
using namespace std;
ifstream fi("disjoint.in");
ofstream fo("disjoint.out");
int n, m;
int i, j, op, x, y;
int T[nmax], NR[nmax];
int root(int nod)
{
if (T[nod] == nod)
return nod;
return root(T[nod]);
}
void join(int x, int y)
{
int r1 = root(x);
int r2 = root(y);
if (r1 == r2) return;
if (NR[r1] >= NR[r2])
{
T[r2] = r1;
NR[r1] += NR[r2];
}
else
{
T[r1] = r2;
NR[r2] += NR[r1];
}
}
void query(int x, int y)
{
int r1 = root(x);
int r2 = root(y);
if (r1 == r2)
fo << "DA\n";
else
fo << "NU\n";
}
int main()
{
fi >> n >> m;
for (i = 1; i <= n; i++)
T[i] = i, NR[i] = 1;
for (i = 1; i <= m; i++)
{
fi >> op >> x >> y;
switch(op) {
case 1:
join(x, y);
break;
case 2:
query(x, y);
break;
}
}
fi.close();
fo.close();
return 0;
}