Pagini recente » Cod sursa (job #1726943) | Cod sursa (job #1705509) | Monitorul de evaluare | Cod sursa (job #1142312) | Cod sursa (job #2512453)
#include <bits/stdc++.h>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int father[100005],depth[100005], n, m, a, b, tip;
int old_man(int ind)
{
if (father[ind]==ind)
return ind;
return old_man(father[ind]);
}
void conc(int a, int b)
{
int auxa=old_man(a);
int auxb=old_man(b);
if (auxa!=auxb)
{
if (depth[auxa]<depth[auxb])
father[auxa]=auxb;
else if (depth[auxb]<depth[auxa])
father[auxb]=auxa;
else
father[auxa]=auxb, depth[auxb]++;
}
}
void query(int a, int b)
{
if (old_man(a)==old_man(b))
{
g << "DA\n";
return;
}
g << "NU\n";
}
int main()
{
f >> n >> m;
for (int i=1; i<=n; ++i)
father[i]=i, depth[i]=1;
for (int i=1; i<=m; ++i)
{
f >> tip >> a >> b;
if (tip==1)
conc(a,b);
else
query(a,b);
}
return 0;
}