Pagini recente » Cod sursa (job #2092868) | Cod sursa (job #2843258) | Cod sursa (job #1480288) | Cod sursa (job #374116) | Cod sursa (job #1461388)
#include <fstream>
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
int N, M , op_tip;
int *RG, *TT;
int Find(int x)
{
int y, bos = TT[x];
while (bos != TT[bos])
bos = TT[bos];
while (TT[x] != x)
{
y = TT[x];
TT[x] = bos;
x = y;
}
return bos;
}
void Unite(int x, int y)
{
if (RG[x] < RG[y]) TT[x] = y, RG[y] += RG[x];
else TT[y] = x, RG[x] += RG[y];
if (RG[x] == RG[y]) RG[x] += 1;
}
int main()
{
fin >> N >> M;
RG = new int[N + 1]();
TT = new int[N + 1]();
for (int i = 1; i <= N; i++)
{
RG[i] = 1;
TT[i] = i;
}
for (int x, y, i = 1; i <= M; i++)
{
fin >> op_tip >> x >> y;
switch (op_tip)
{
case 1 :
{
Unite(Find(x), Find(y));
break;
}
case 2 :
{
if (Find(x) == Find(y)) fout << "DA\n";
else fout << "NU\n";
}
}
}
return 0;
}