Pagini recente » Borderou de evaluare (job #2691262) | Borderou de evaluare (job #457340) | Borderou de evaluare (job #1216779) | Borderou de evaluare (job #2220194) | Cod sursa (job #2505194)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
const int NMAX=1e5 + 10;
int T[NMAX], Rang[NMAX], n, m;
inline int Root(int x)
{
if(T[x]==0)
return x;
T[x]=Root(T[x]);
return T[x];
}
void Unite(int x, int y)
{
int rx=Root(x), ry=Root(y);
if(rx!=ry)
{
if(Rang[rx]<Rang[ry])
T[rx]=ry;
else
{
T[ry]=rx;
if(Rang[rx]==Rang[ry])
Rang[rx]++;
}
}
}
void Read_SOLVE()
{
int p, x, y;
in>>n>>m;
for(int i=1; i<=m; i++)
{
in>>p>>x>>y;
if(p==1)
Unite(x, y);
else
{
if(Root(x)==Root(y))
out<<"DA\n";
else
out<<"NU\n";
}
}
}
int main()
{
Read_SOLVE();
return 0;
}