Pagini recente » Cod sursa (job #2003930) | Cod sursa (job #910856) | Cod sursa (job #2560140) | Cod sursa (job #2185718) | Cod sursa (job #1284614)
#include <fstream>
using namespace std;
ifstream is("disjoint.in");
ofstream os("disjoint.out");
int N, M, Type, X, Y;
int T[100001], Rank[100001];
int Find(int x);
void Union(int x, int y);
int main()
{
is >> N >> M;
for ( int i = 1; i <= N; ++i )
T[i] = i;
for ( int i = 1; i <= M; ++i )
{
is >> Type >> X >> Y;
if ( Type == 2 )
{
if ( Find(X) == Find(Y) )
os << "DA\n";
else
os << "NU\n";
}
else
{
Union(X,Y);
}
}
}
int Find(int x)
{
int R(x), Temp;
while ( T[R] != R )
R = T[R];
while ( T[x] != x )
{
Temp = T[x];
T[x] = R;
x = Temp;
}
return R;
}
void Union(int x, int y)
{
if ( Rank[x] > Rank[y] )
T[y] = x;
if ( Rank[x] < Rank[y] )
T[x] = y;
if ( Rank[x] == Rank[y] )
{
T[x] = y;
Rank[y]++;
}
}