Pagini recente » Cod sursa (job #1347914) | Cod sursa (job #2499514) | Cod sursa (job #2722981) | Cod sursa (job #2069482) | Cod sursa (job #1540239)
#include <iostream>
#include <fstream>
using namespace std;
#define nmax 100001
ifstream fi("disjoint.in");
ofstream fo("disjoint.out");
int n, m;
int op, a, b;
int T[nmax], NR[nmax];
int root(int nod)
{
if (nod == T[nod])
return nod;
return root(T[nod]);
}
int main()
{
fi >> n >> m;
// initialize
for (int i = 1; i <= n; i++)
T[i] = i, NR[i] = 1;
for (int i = 1; i <= m; i++)
{
fi >> op >> a >> b;
int r1 = root(a);
int r2 = root(b);
if (op == 1)
{
// reuniune
if (NR[r1] >= NR[r2])
{
NR[r1] += NR[r2];
T[r2] = r1;
}
else
{
NR[r2] += NR[r1];
T[r1] = r2;
}
}
else
{
// check
if (r1 == r2)
fo << "DA\n";
else
fo << "NU\n";
}
}
fi.close();
fo.close();
return 0;
}