Pagini recente » Cod sursa (job #2021470) | Cod sursa (job #211691) | Cod sursa (job #3320860) | Cod sursa (job #2066849) | Cod sursa (job #3326676)
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int Nmax = 1e5 + 5;
int sef[Nmax], siz[Nmax];
int findSef( int x )
{
if ( x == sef[x] )
return x;
return findSef(sef[x]);
}
void join( int a, int b )
{
int x, y;
x = findSef(a);
y = findSef(b);
if ( siz[x] > siz[y] )
{
siz[x] += siz[y];
sef[y] = x;
}
else
{
siz[y] += siz[x];
sef[x] = y;
}
}
int main()
{
int n, m, i;
fin >> n >> m;
for ( i = 1; i <= n; ++i )
{
sef[i] = i;
siz[i] = 1;
}
for ( i = 1; i <= m; ++i )
{
int tip, x, y;
fin >> tip >> x >> y;
if ( tip == 1 )
{
join(x, y);
}
else
{
if ( findSef(x) == findSef(y) )
fout << "DA\n";
else
fout << "NU\n";
}
}
return 0;
}