Pagini recente » Cod sursa (job #1241552) | Cod sursa (job #1713305) | Cod sursa (job #1523567) | Cod sursa (job #341453) | Cod sursa (job #2713718)
#include <fstream>
#include <iostream>
#define nmax 100005
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int v[nmax];
int root(int x)
{
int t = x;
while (v[t] >= 0)
t = v[t];
return t;
}
int tie(int a, int b)
{
int x = root(a);
int y = root(b);
// v[x], v[y] < 0
if (v[x] < v[y]) {
v[x] += v[y];
v[y] = x;
}
else {
v[y] += v[x];
v[x] = y;
}
}
int query(int a, int b)
{
int x = root(a);
int y = root(b);
if (x == y)
return 1;
else
return 0;
}
int main()
{
int n, m;
f >> n >> m;
for (int i = 1; i <= n; i++)
v[i] = -1;
for (int i = 1; i <= m; i++) {
int op;
int a, b;
f >> op >> a >> b;
if (op == 1)
tie(a, b);
else
g << (query(a, b) ? "DA\n" : "NU\n");
}
return 0;
}