Pagini recente » Cod sursa (job #1731649) | Cod sursa (job #1837247) | Cod sursa (job #201712) | Cod sursa (job #629945) | Cod sursa (job #2054787)
#include <iostream>
#include <fstream>
#include <cmath>
#include <iomanip>
#include <algorithm>
using namespace std;
ifstream in("disjoint.in");
ofstream g("disjoint.out");
int N,M,f[100001],r[100001];
int Find(int x)
{
int y, z;
for(y = f[x]; y != f[y]; y = f[y]);
while(x != f[x])
{
z = f[x];
f[x] = y;
x = z;
}
return y;
}
int Union(int x, int y)
{
if(r[x] <= r[y])
f[x] = y;
else f[y] = x;
if(r[x] == r[y])
++r[y];
}
int main()
{
in >> N >> M;
for(int i = 1; i <= N; i++)
{
f[i] = i;
r[i] = 1;
}
while(M--)
{
int cod, x, y;
in >> cod >> x >> y;
if(cod == 2)
{
if(Find(x) == Find(y))
g << "DA\n";
else
g << "NU\n";
}
else
{
x = Find(x);
y = Find(y);
if(x != y)
Union(x, y);
}
}
return 0;
}