Pagini recente » Cod sursa (job #2427447) | Cod sursa (job #1137575) | Cod sursa (job #1137374) | Cod sursa (job #2025541) | Cod sursa (job #2427449)
#include <iostream>
#include <fstream>
#define INF 100005
using namespace std;
int cod, x, y;
int n, m;
int dd[INF], rg[INF];
int find(int x)
{
int r = dd[x], y;
while (r != dd[r]) r = dd[r];
while (dd[x] != x)
{
y = dd[x];
dd[x] = r;
x = y;
}
return r;
}
void unite(int x, int y)
{
if (rg[x] > rg[y]) dd[y] = dd[x];
else dd[x] = dd[y];
if (rg[x] == rg[y])
rg[x]++;
}
int main()
{
ifstream f("disjoint.in");
ofstream g("disjoint.out");
f >> n >> m;
for (int i = 1; i <= n; i++)
dd[i] = i, rg[i] = 1;
while (m--)
{
f >> cod >> x >> y;
if (cod == 1)
unite(find(x), find(y));
else
{
if (find(x) == find(y)) g << "DA\n";
else g << "NU\n";
}
}
f.close();
g.close();
return 0;
}