Pagini recente » Cod sursa (job #2180459) | Cod sursa (job #2857097) | Cod sursa (job #1362100) | Cod sursa (job #123955) | Cod sursa (job #2667931)
#include<fstream>
#include<iostream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
const int LIM = 100005;
int N, M;
int T[LIM], RANG[LIM];
int find(int x)
{
if (T[x] == 0)
return x;
else
{
int y = find(T[x]);
T[x] = y;
return y;
}
}
void unite(int m1, int m2)
{
int T1 = find(m1);
int T2 = find(m2);
if (T1 != T2)
{
if (RANG[T1] < RANG[T2])
T[T1] = T2;
else
{
T[T2] = T1;
if (RANG[T1] == RANG[T2])
RANG[T1]++;
}
}
}
int main()
{
f >> N >> M;
int cod, x, y;
for (int i = 1; i <= M; i++)
{
f >> cod >> x >> y;
if (cod == 1)
unite(x, y);
else
{
if (find(x) == find(y))
g << "DA";
else
g << "NU";
g << '\n';
}
}
g << '\n';
for (int i = 1; i <= N; i++)
g << i << " ";
g << '\n';
for (int i = 1; i <= N; i++)
g << T[i] << " ";
return 0;
}
/*
1 3 4
1 4 5
1 7 8
1 8 2
1 1 2
1 1 6
*/