Pagini recente » Cod sursa (job #2804476) | Istoria paginii runda/simulare-5-4/clasament | Cod sursa (job #2650314) | Cod sursa (job #2805340) | Cod sursa (job #1786618)
#include <cstdio>
using namespace std;
int n, m;
class paduriDisjuncte
{
private:
int parinte[100005];
int adancimi[100005];
int gasireParinte(int x)
{
int xx = x;
while(parinte[x] != x)
{
x = parinte[x];
}
while(parinte[xx] != xx)
{
parinte[xx] = x;
xx = parinte[xx];
}
return x;
}
public:
paduriDisjuncte()
{
for(int i = 0; i < 100005; i++)
{
parinte[i] = i;
adancimi[i] = 0;
}
}
void unire(int x, int y)
{
int ad1 = adancimi[x];
int ad2 = adancimi[y];
if(ad1 < ad2)
{
parinte[gasireParinte(x)] = gasireParinte(y);
}
else if(ad1 > ad2)
{
parinte[gasireParinte(y)] = gasireParinte(x);
}
else
{
parinte[gasireParinte(x)] = gasireParinte(y);
adancimi[x]++;
}
}
bool suntUnite(int x, int y)
{
if(gasireParinte(x) == gasireParinte(y))
{
return true;
}
else
{
return false;
}
}
}padure;
void citire()
{
scanf("%d %d", &n, &m);
int tmp1, tmp2, tmp3;
for(int i = 0; i < m; i++)
{
scanf("%d %d %d", &tmp1, &tmp2, &tmp3);
if(tmp1 == 1)
{
padure.unire(tmp2, tmp3);
}
else if(tmp1 == 2)
{
if(padure.suntUnite(tmp2, tmp3))
{
printf("DA\n");
}
else
{
printf("NU\n");
}
}
}
}
int main()
{
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
citire();
return 0;
}