Pagini recente » Cod sursa (job #2761231) | Cod sursa (job #562155) | Cod sursa (job #336946) | Cod sursa (job #2380562) | Cod sursa (job #3271648)
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
const int NMAX = 100005;
int n, m;
int rang[NMAX];
int dad[NMAX];
void do_union(int x, int y)
{
if (rang[x] < rang[y])
{
dad[y] = x;
}
else if (rang[x] > rang[y]){
dad[x] = y;
}
else{
dad[x] = y;
rang[y]++;
}
}
int do_find(int nod)
{
if (nod != dad[nod]) {
int repr = do_find(dad[nod]);
dad[nod] = repr;
return repr;
}
return nod;
}
int main()
{
f >> n >> m;
for (int i = 1; i <= n; i++)
{
rang[i] = i;
dad[i] = i;
}
for (int i = 1; i <= m; i++)
{
int quest, x, y;
f >> quest >> x >> y;
int repx = do_find(x);
int repy = do_find(y);
if (quest == 1)
{
do_union(repx, repy);
}
else{
if (repx == repy)
{
g << "DA" << '\n';
}
else
{
g << "NU" << '\n';
}
}
}
}