Pagini recente » Cod sursa (job #837665) | Cod sursa (job #1874634) | Cod sursa (job #569654) | Cod sursa (job #2625952) | Cod sursa (job #2501813)
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m, cod;
int i;
int parinte[100002], marime[100002];
void operatie_1(int x, int y)
{
int x_copie = x;
while (x_copie != parinte[x_copie])
{
x_copie = parinte[x_copie];
}
int x_copie2 = x;
while (x_copie2 != parinte[x_copie2])
{
x_copie2 = parinte[x_copie2];
parinte[x_copie2] = x_copie;
}
int y_copie = y;
while (y_copie != parinte[y_copie])
{
y_copie = parinte[y_copie];
}
int y_copie2 = y;
while (y_copie2 != parinte[y_copie2])
{
y_copie2 = parinte[y_copie2];
parinte[y_copie2] = y_copie;
}
if (marime[x_copie] >= marime[y_copie])
{
parinte[y_copie] = x_copie;
marime[x_copie] += marime[y_copie];
}
else
{
parinte[x_copie] = y_copie;
marime[y_copie] += marime[x_copie];
}
}
void operatie_2(int x, int y)
{
int x_copie = x;
while (x_copie != parinte[x_copie])
{
x_copie = parinte[x_copie];
}
int x_copie2 = x;
while (x_copie2 != parinte[x_copie2])
{
x_copie2 = parinte[x_copie2];
parinte[x_copie2] = x_copie;
}
int y_copie = y;
while (y_copie != parinte[y_copie])
{
y_copie = parinte[y_copie];
}
int y_copie2 = y;
while (y_copie2 != parinte[y_copie2])
{
y_copie2 = parinte[y_copie2];
parinte[y_copie2] = y_copie;
}
if (marime[x_copie] >= marime[y_copie])
{
parinte[y_copie] = x_copie;
marime[x_copie] += marime[y_copie];
}
else
{
parinte[x_copie] = y_copie;
marime[y_copie] += marime[x_copie];
}
if (x_copie == y_copie)
fout << "DA\n";
else
fout << "NU\n";
}
int main()
{
int x, y;
fin >> n >> m;
for (i = 1; i <= n; i++)
{
parinte[i] = i;
marime[i] = 1;
}
for (i = 1; i <= m; i++)
{
fin >> cod >> x >> y;
if (cod == 1)
operatie_1(x, y);
else
operatie_2(x, y);
}
return 0;
}