Pagini recente » Cod sursa (job #3285433) | Cod sursa (job #706584) | Cod sursa (job #1772746) | Cod sursa (job #936729) | Cod sursa (job #2846695)
// Mihai Priboi
#include <stdio.h>
#include <algorithm>
#define MAXN 100000
int parent[MAXN + 1], depth[MAXN + 1];
void build( int n ) {
int i;
for( i = 1; i <= n; i++ )
parent[i] = i;
}
int find( int val ) {
if( parent[val] == val )
return val;
return parent[val] = find(parent[val]);
}
void unite( int a, int b ) {
int setA, setB;
setA = find(a);
setB = find(b);
if( depth[setA] < depth[setB] )
std::swap(setA, setB);
parent[setB] = setA;
if( depth[setA] == depth[setB] )
depth[setA]++;
}
int main() {
FILE *fin, *fout;
int n, m, cod, x, y, i;
fin = fopen( "disjoint.in", "r" );
fout = fopen( "disjoint.out", "w" );
fscanf( fin, "%d%d", &n, &m );
build(n);
for( i = 0; i < m; i++ ) {
fscanf( fin, "%d%d%d", &cod, &x, &y );
if( cod == 1 )
unite(x, y);
else {
if( find(x) == find(y) )
fprintf( fout, "DA\n" );
else
fprintf( fout, "NU\n" );
}
}
fclose( fin );
fclose( fout );
return 0;
}