Pagini recente » Istoria paginii runda/10din10/clasament | Cod sursa (job #2098461) | Cod sursa (job #783515) | Cod sursa (job #1985972) | Cod sursa (job #2173392)
#include <fstream>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int t[100001], h[100001];
int n;
int radacina(int x);
void uniune(int x, int y);
bool ask(int x, int y);
int main()
{
int m,x,y,cod;
in >> n >> m;
while (m)
{
in >> cod >> x >> y;
if (cod==1)
uniune(x,y);
else
if (ask(x,y))
out << "DA" << '\n';
else
out << "NU" << '\n';
m--;
}
return 0;
}
int radacina(int x)
{
if (t[x]==0)
return x;
t[x]=radacina(t[x]);
return t[x];
}
void uniune(int x,int y)
{
int rx=radacina(x),ry=radacina(y);
if (h[x]>h[y])
{
t[ry]=rx;
}
else
{
t[rx]=ry;
if (h[x]==h[y])
h[x]++;
}
}
bool ask(int x,int y)
{
return radacina(x)==radacina(y);
}