Pagini recente » Cod sursa (job #1103583) | Cod sursa (job #1900899) | Cod sursa (job #2583994) | Cod sursa (job #804051) | Cod sursa (job #2819247)
#include <fstream>
#include <vector>
#include <queue>
#include <climits>
#define MOD 1000000007
using namespace std;
/// timpul minim pentru toate trupele sa ajunga in nodul x
/// nodul y in care se poate ajunge cu timpul minim in general, si timpul respectiv
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
/// daca au acelasi tata sunt in aceeasi multime
/// cand se face merge la 2 multimi se leaga tatal multimii mai mici de tatal multimii mai mari
int n ;
struct nod
{
int tatal = 0 ;
int fii = 1, val ;
};
nod m[100009] ;
int tat(int k) /// imi da tatal suprem a lui nod
{
if(!m[k].tatal)return k ;
else
{
int tsuprem = tat(m[k].tatal) ;
m[k].tatal = tsuprem ;
return tsuprem ;
}
}
int main()
{
int q ;
cin >> n >> q ;
while(q --)
{
int a, b, c ;
cin >> c >> a >> b ;
if(c == 1) /// se face merge
{
if(m[b].fii < m[a].fii)
swap(a, b) ;
/// a va fi mai mic ca b
int f = tat(a), e = tat(b) ;
m[e].fii = min(m[f].fii + 1, m[e].fii);
m[f].tatal = e ;
}
else /// se face query
{
if(tat(a) == tat(b))
cout << "DA" << '\n' ;
else cout << "NU" << '\n' ;
}
}
return 0 ;
}