Pagini recente » Cod sursa (job #2196503) | Cod sursa (job #1944158) | Cod sursa (job #1021495) | Cod sursa (job #1248815) | Cod sursa (job #1308745)
#include <fstream>
using namespace std;
ifstream is ("disjoint.in");
ofstream os ("disjoint.out");
int N, M;
int T[100001], S[100001];
int Root(int k);
void Unite(int a, int b);
int main()
{
is >> N >> M;
for (int i = 1; i <= N; ++i)
T[i] = i, S[i] = 1;
for (int i = 1, OP, a, b, x, y; i <= M; ++i)
{
is >> OP >> a >> b;
if (OP == 2)
{
if (Root(a) == Root(b)) os << "DA\n";
else os << "NU\n";
}
else
Unite(Root(a), Root(b));
}
is.close();
os.close();
}
int Root(int k)
{
for (; T[k] != k; k = T[k]);
return k;
};
void Unite(int a, int b)
{
if (S[a] > S[b]) T[b] = a;
else T[a] = b;
if (S[a] == S[b])
S[b]++;
};