Pagini recente » Cod sursa (job #1252293) | Cod sursa (job #2403062) | Cod sursa (job #2934251) | Cod sursa (job #1511180) | Cod sursa (job #2142322)
#include <bits/stdc++.h>
#define nmax 100005
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
int n, m, h[nmax], tata[nmax];
int parinte(int a)
{
int c_a = a;
while ( a != tata[a] )
a = tata[a];
while ( c_a != a )
{
int aux = c_a;
c_a = tata[c_a];
tata[aux] = a;
}
return a;
}
void unire(int x, int y)
{
int a = parinte(x);
int b = parinte(y);
if ( a == b )
return;
if ( h[a] > h[b] )
tata[b] = a;
else
{
tata[a] = b;
if ( h[a] == h[b] )
h[a++];
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
fin>>n>>m;
for ( int i = 1; i <= n; ++i )
{
tata[i] = i;
h[i] = i;
}
for ( int i = 1; i <= m; ++i )
{
int cod, x, y;
fin>>cod>>x>>y;
if ( cod == 1 )
unire(x, y);
if ( cod == 2 )
if ( parinte(x) == parinte(y) )
fout<<"DA"<<'\n';
else
fout<<"NU"<<'\n';
}
}