Pagini recente » Cod sursa (job #340178) | Cod sursa (job #934631) | Cod sursa (job #2370712) | Cod sursa (job #1907010) | Cod sursa (job #1487931)
#include <iostream>
#include <cstdio>
#define maxc 100005
using namespace std;
int n,m,op,h[maxc],G[maxc],y,x;
int findn(int x)
{
int i=x,aux;
while (G[i] != i)
i=G[i]; ///caut radacina
for (; G[x]!=x;)
{
aux=G[x]; ///salvez spre ce e orientat initial nodul
G[x]=i; ///orientez nodul actual spre radacina
x=aux; ///merg mai departe pe conexiunea veche
}
return i;
}
void unite (int x,int y)
{
if (h[x] > h[y]) ///unire multimea de rang mai mic cu cea de rang mai mare
G[y]=x;
else G[x]=y;
if (h[x]==h[y])
++h[y];
}
void rezolv()
{
scanf("%d%d",&n,&m);
for (int i=1;i<=n;++i)
{
G[i]=i;
h[i]=1;
}
for (int i=1; i<=m; ++i)
{
scanf("%d%d%d",&op,&x,&y);
if (op==1)
{
if (findn(x) == findn(y))
{
printf("%d ", i);
return ;
}
unite(findn(x),findn(y));
}
else
{
if (findn(x)==findn(y))
printf("DA\n");
else printf("NU\n");
}
}
}
int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
rezolv();
return 0;
}