Mai intai trebuie sa te autentifici.
Cod sursa(job #1770200)
| Utilizator | Data | 3 octombrie 2016 21:14:56 | |
|---|---|---|---|
| Problema | Paduri de multimi disjuncte | Scor | 70 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 1.32 kb |
#include <cstdio>
using namespace std;
int n, m;
int parinti[100005];
int nr;
int gasireParinti(int x)
{
if(parinti[x] == x)
{
return x;
}
else
{
nr++;
return gasireParinti(parinti[x]);
}
}
int main()
{
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
int tmp1, tmp2, tmp3;
scanf("%d %d", &n, &m);
for(int i = 0; i < n; i++)
{
parinti[i] = i;
}
for(int i = 0; i < m; i++)
{
scanf("%d %d %d", &tmp1, &tmp2, &tmp3);
if(tmp1 == 1)
{
nr = 0;
int nr1, nr2;
int nrx1, nrx2;
nrx1 = gasireParinti(tmp2);
nr1 = nr;
nr = 0;
nrx2 = gasireParinti(tmp3);
nr2 = nr;
if(nr1 > nr2)
{
parinti[nrx1] = gasireParinti(nrx2);
}
else
{
parinti[nrx2] = gasireParinti(nrx1);
}
}
else
{
if(gasireParinti(tmp2) == gasireParinti(tmp3))
{
printf("DA\n");
}
else
{
printf("NU\n");
}
}
}
return 0;
}
