Pagini recente » Cod sursa (job #411303) | Cod sursa (job #1602366) | Cod sursa (job #2338148) | Cod sursa (job #2307252) | Cod sursa (job #755739)
Cod sursa(job #755739)
#include <fstream>
using namespace std;
long Parinti[100005];
long Inaltime[100005];
long maxint(long a,long b)
{
return (a > b)?a: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;
}
for (i = 0;i < M;i += 1)
{
fin >> o >> x >> y;
if (o == 1)
{
p1 = Parinti[x];
p2 = Parinti[y];
while (Parinti[p1] != p1)
{
p1 = Parinti[p1];
}
while (Parinti[p2] != p2)
{
p2 = Parinti[p2];
}
if (Inaltime[p1] > Inaltime[p2])
{
Parinti[p2] = p1;
Inaltime[p1] = maxint(Inaltime[p1],Inaltime[p2] + 1);
}
else
{
Parinti[p1] = p2;
Inaltime[p2] = maxint(Inaltime[p2],Inaltime[p1] + 1);
}
}
if (o == 2)
{
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;
}