Pagini recente » Cod sursa (job #1457074) | Cod sursa (job #1484136) | Cod sursa (job #1716752) | Profil Rodik_Rody | Cod sursa (job #755733)
Cod sursa(job #755733)
#include <fstream>
using namespace std;
long Parinti[100005];
long Inaltime[100005];
long maxint(long a,long b)
{
if (a > b)
{
return a;
}
return b;
}
int main(void)
{
long N,M,i,o,x,y,p1,p2;
fstream fin("disjoint.in",ios::in);
fstream fout("disjoint.out",ios::out);
fin >> N >> M;
for (i = 1;i <= N;i += 1)
{
Parinti[i] = i;
Inaltime[i] = 1;
}
long j = 0;
for (i = 0;i < M;i += 1)
{
fin >> o >> x >> y;
if (o == 1)
{
p1 = x;
p2 = y;
while (Parinti[p1] != p1)
{
p1 = Parinti[p1];
}
while (Parinti[p2] != p2)
{
p2 = Parinti[p2];
}
if (Inaltime[p1] >= Inaltime[p2])
{
Parinti[y] = p1;
Inaltime[p1] = maxint(Inaltime[p1],Inaltime[p2] + 1);
}
else
{
Parinti[x] = p2;
Inaltime[p2] = maxint(Inaltime[p2],Inaltime[p1] + 1);
}
}
if (o == 2)
{
j += 1;
while (Parinti[x] != x)
{
x = Parinti[x];
}
while (Parinti[y] != y)
{
y = Parinti[y];
}
if (x == y)
{
fout << "DA\n";
}
else
{
fout << "NU\n";
}
}
}
fin.close();
fout.close();
return 0;
}