Pagini recente » Cod sursa (job #1274920) | Cod sursa (job #294940) | Istoria paginii runda/easy_g/clasament | Istoria paginii utilizator/harungunaydin | Cod sursa (job #2012036)
#include <iostream>
#include <fstream>
#define Nmax 100005
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int N, M,rad[Nmax],r[Nmax],op;
int radacina(int x)
{
int R;
for(R = x; rad[R] != R; R = rad[R]);
for(;rad[x]!=x;)
{
int y = rad[x];
rad[x] = R;
x = y;
}
return R;
}
void un(int x, int y)
{
if(r[x]>r[y])
rad[y] = x;
else
rad[x] = y;
if(r[x] == r[y])r[y]++;
}
int main()
{
int x, y;
fin >> N >> M;
for(int i = 1; i <= N; i++)
{
rad[i] = i;
r[i] = 1;
}
for(int i = 1; i <= M; i++)
{
fin >> op >> x >> y;
if(op == 1)
{
if(radacina(x) != radacina(y))
un(radacina(x), radacina(y));
}
else
{
if(radacina(x) == radacina(y))fout << "DA\n";
else fout << "NU\n";
}
}
return 0;
}