Pagini recente » Cod sursa (job #2052274) | Cod sursa (job #2299516) | Cod sursa (job #1436145) | Cod sursa (job #449066) | Cod sursa (job #2080246)
#include <iostream>
#include <fstream>
#define MaxN 100001
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int N, M, p[MaxN], rnk[MaxN], o, a, b;
int Find(int x)
{
if (p[x] != x)
p[x] = Find(p[x]);
return p[x];
}
void Union(int x, int y)
{
int rx = Find(x), ry = Find(y);
if (rx == ry)
return;
if (rnk[rx] > rnk[ry])
{
p[ry] = rx;
rnk[rx] = max(rnk[rx], rnk[ry]+1);
rnk[ry] = 0;
}
else
{
p[rx] = ry;
rnk[ry] = max(rnk[ry], rnk[rx]+1);
rnk[rx] = 0;
}
}
int main()
{
f>>N>>M;
for (int i=1;i<=N;i++)
p[i] = i;
for (int i = 0;i < M;i++)
{
f>>o>>a>>b;
if (o==1)
Union(a, b);
else if (o==2)
{
a = Find(a);
b = Find(b);
if (a == b)
g<<"DA\n";
else
g<<"NU\n";
}
}
}