Mai intai trebuie sa te autentifici.
Cod sursa(job #1392490)
| Utilizator | Data | 18 martie 2015 17:59:25 | |
|---|---|---|---|
| Problema | Paduri de multimi disjuncte | Scor | 0 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.79 kb |
#include <cstdio>
using namespace std;
int t[100010],rang[100010];
inline int findd(int x)
{
if (t[x]==x)return x;
t[x]=findd(t[x]);
}
inline void uneste(int x,int y)
{
if (rang[x]>rang[y])t[y]=x;
else if (rang[x]<rang[y])t[x]=y;
else
{
rang[x]++;
t[y]=x;
}
}
int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
int n, que;
scanf("%d %d",&n,&que);
for (int i=1; i<=n; i++)
{
t[i]=i;
rang[i]=1;
}
for (int i=1; i<=que; i++)
{
int instr, x, y;
scanf("%d %d %d",&instr,&x,&y);
if (instr==1) uneste(findd(x),findd(y));
else if (findd(x)==findd(y))printf("DA\n");
else printf("NU\n");
}
return 0;
}
