Pagini recente » Cod sursa (job #195918) | Cod sursa (job #401941) | Cod sursa (job #1694724) | Cod sursa (job #2224526) | Cod sursa (job #2061218)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
struct forest{
int p;
int rankk;
}v[100001];
void make_set( int x )
{
v[x].p = x;
}
int find_set ( int x )
{
if ( x != v[x].p )
v[x].p = find_set( v[x].p );
return v[x].p;
}
void link ( int x, int y )
{
if ( v[x].rankk > v[y].rankk )
v[y].p = x;
else
if( v[x].rankk < v[y].rankk )
v[x].p = y;
else{
v[y].p = x;
v[x].rankk++;
}
}
void unite ( int x, int y )
{
link( find_set(x), find_set(y) );
}
int main()
{
int n, m, i, cod, x, y;
fin>>n>>m;
for( i = 1; i <= n; i++ ) {
make_set(i);
}
for ( i = 1; i <= m; i++ ) {
fin >> cod >> x >> y;
if ( cod == 1 ) {
unite ( x, y );
}
else {
if ( find_set(x) == find_set(y) )
fout<<"DA"<<'\n';
else
fout<<"NU"<<'\n';
}
}
fin.close();
fout.close();
return 0;
}