Pagini recente » Cod sursa (job #3218171) | Cod sursa (job #412451) | Cod sursa (job #3218156) | Cod sursa (job #2438093) | Cod sursa (job #492252)
Cod sursa(job #492252)
/*
* File: main.cpp
* Author: bitone
*
* Created on October 13, 2010, 9:35 PM
*/
#include <fstream>
#include <cstdlib>
#define MAX_N 100011
using namespace std;
/*
*
*/
int f[MAX_N], r[MAX_N];
inline int find( int x )
{
int y, z;
for( y=x; y != f[y]; y=f[y] );
while( x != f[x] )
{
z=f[x];
f[x]=y;
x=z;
}
return y;
}
inline void unite( int x, int y )
{
if( r[x] == r[y] )
{
if( x != y )
f[y]=x;
++r[y];
}
else r[x]=r[y]=min( r[x], r[y] );
}
int main(int argc, char** argv)
{
int N, M, i, j, k;
ifstream in( "disjoint.in" );
ofstream out( "disjoint.out" );
in>>N>>M;
for( i=1; i <= N; ++i )
f[i]=i, r[i]=1;
for( ; M; --M )
{
in>>i>>j>>k;
if( 1 == i )
unite( find(j), find(k) );
else out<<( find(k) == find(j) ? "DA" : "NU" )<<'\n';
}
return EXIT_SUCCESS;
}