Pagini recente » Cod sursa (job #2950781) | Cod sursa (job #3258201) | Cod sursa (job #1193890) | Cod sursa (job #1995224) | Cod sursa (job #2501852)
#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 x1 = x;
while(x1 != parinte[x1])
{
x1 = parinte[x1];
}
int x2 = x;
while(x2 != parinte[x2])
{
x2 = parinte[x2];
parinte[x2] = x1;
}
int y1 = y;
while(y1 != parinte[y1])
{
y1 = parinte[y1];
}
int y2 = y;
while(y2 != parinte[y2])
{
y2 = parinte[y2];
parinte[y2] = y1;
}
if(marime[x1] >= marime[y1])
{
parinte[y1] = x1;
marime[x1] += marime[y1];
}
else
{
parinte[x1] = y1;
marime[y1] += marime[x1];
}
}
void operatie_2(int x, int y)
{
int x1 = x;
while(x1 != parinte[x1])
{
x1 = parinte[x1];
}
int x2 = x;
while(x2 != parinte[x2])
{
x2 = parinte[x2];
parinte[x2] = x1;
}
int y1 = y;
while(y1 != parinte[y1])
{
y1 = parinte[y1];
}
int y2 = y;
while(y2 != parinte[y2])
{
y2 = parinte[y2];
parinte[y2] = y1;
}
if(marime[x1] >= marime[y1])
{
parinte[y1] = x1;
marime[x1] += marime[y1];
}
else
{
parinte[x1] = y1;
marime[y1] += marime[x1];
}
if (x1 == y1)
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;
}