Pagini recente » Cod sursa (job #1978702) | Cod sursa (job #345781) | Cod sursa (job #2676209) | Cod sursa (job #2062557) | Cod sursa (job #1821486)
#include <fstream>
using namespace std;
ifstream in ("disjoint.in");
ofstream out ("disjoint.out");
const int N = 100005;
int tata[N], niv[N], n, m;
void myunion (int r1, int r2)
{
if(niv[r1] < niv[r2])
tata[r1] = r2;
else if(niv[r2] < niv[r1])
tata[r2] = r1;
else
{
tata[r1] = r2;
niv[r2]++;
}
}
int find(int x)
{
int y, rad = x;
while(tata[rad] != rad)
rad = tata[rad];
while(tata[x] != x)
{
y = tata[x];
tata[x] = rad;
x = y;
}
return rad;
}
int main()
{
in >> n >> m;
int i;
for(i = 1; i <= n; i++)
tata[i] = i;
int cod, x, y;
for(i = 1; i <= m; i++)
{
in >> cod >> x >> y;
if (cod == 1)
myunion(x, y);
else
{
if(find(x) == find(y))
out << "DA\n";
else out << "NU\n";
}
}
return 0;
}