Pagini recente » Cod sursa (job #446393) | Cod sursa (job #2392030) | Istoria paginii runda/oji_2012_10 | Cod sursa (job #1096202) | Cod sursa (job #2121317)
#include<iostream>
#include<fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int N, M;
int t[100003], c[100003];
void Initializari()
{
for (int i=1; i<=N; i++)
{ t[i] = 0;
c[i] = 1;
}
}
void Union(int x, int y)
{
if (c[x] < c[y])
{
c[y] = c[y] + c[x];
c[x] = 0;
t[x] = y;
}
else
{
c[x] = c[x] + c[y];
c[y] = 0;
t[y] = x;
}
}
int Find(int x) /// returneaza taticul lui x, ala suprem
{
int y,z;
y = x;
while (t[x] != 0)
x = t[x];
while (t[y] != 0)
{
z = t[y];
t[y] = x;
y = z;
}
return x;
}
int main ()
{
fin >> N >> M;
Initializari();
int x, y, tip;
for (int i=1; i<=M; i++)
{
fin >> tip >> x >> y;
if (tip == 1)
{
Union(Find(x), Find(y));
}
else
{
if (Find(x) == Find(y))
fout << "DA\n";
else
fout << "NU\n";
}
}
return 0;
}