Pagini recente » Cod sursa (job #2453480) | Cod sursa (job #1812316) | Cod sursa (job #2524077) | Cod sursa (job #1720384) | Cod sursa (job #2793941)
#include <fstream>
using namespace std;
ifstream cin("disjoint.in") ;
ofstream cout("disjoint.out") ;
struct nod
{
nod *tatal = 0 ;
int val ;
int inaltime = 1 ;
};
nod v[100009] ;
int tat(nod x)
{
if(!x.tatal)return x.val ;
int rez = tat(*x.tatal) ;
v[x.val].tatal = &(v[rez]) ;
return rez ;
}
void reuniune(int x, int y)
{
if(v[x].inaltime <= v[y].inaltime) /// punem pe x in y
{
int a = tat(v[x]) ;
int b = tat(v[y]) ;
v[a].tatal = &v[b] ;
if(v[a].inaltime == v[b].inaltime)
v[b].inaltime ++ ;
}
else
{
int b = tat(v[x]) ;
int a = tat(v[y]) ;
v[a].tatal = &v[b] ;
if(v[a].inaltime == v[b].inaltime)
v[b].inaltime ++ ;
}
}
bool query(int x, int y)
{
int a = tat(v[x]) ;
int b = tat(v[y]) ;
return (a == b) ;
}
int main()
{
int n, q ;
cin >> n >> q ;
for(int f = 1 ; f <= n ; f ++)
v[f].val = f ;
while(q --)
{
int cerinta ;
cin >> cerinta ;
if(cerinta == 1)
{
int x, y ;
cin >> x >> y ;
reuniune(x, y) ;
}
else
{
int x, y ;
cin >> x >> y ;
if(query(x, y))cout << "DA\n" ;
else cout << "NU\n" ;
}
}
return 0;
}