Pagini recente » Cod sursa (job #1334078) | Cod sursa (job #889153) | Cod sursa (job #2135428) | Cod sursa (job #1067545) | Cod sursa (job #1591540)
#include <fstream>
#define NMax 100010
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n, queries, set[NMax];
void doUnion(int x, int y)
{
while (set[x] > 0)
x = set[x];
while (set[y] > 0)
y = set[y];
if (x != y) {
if (-set[x] > -set[y]) {
set[x] += set[y];
set[y] = x;
}
else {
set[y] += set[x];
set[x] = y;
}
}
}
bool sameSet(int x, int y)
{
while (set[x] > 0)
x = set[x];
while (set[y] > 0)
y = set[y];
if (x == y)
return 1;
return 0;
}
int main()
{
f >> n >> queries;
for (int i = 1; i <= n; i++)
set[i] = -1;
int cmd, x, y;
for (int i = 1; i <= queries; i++) {
f >> cmd >> x >> y;
if (cmd == 1)
doUnion(x, y);
else {
if (sameSet(x, y) == 1)
g << "DA\n";
else
g << "NU\n";
}
}
}