Pagini recente » Cod sursa (job #1225521) | Cod sursa (job #2377097) | Cod sursa (job #3020) | Cod sursa (job #1444584) | Cod sursa (job #1051680)
#include<cstdio>
using namespace std;
const int MAXN=100005;
int n,m;
int parent[MAXN],rang[MAXN];
bool find(int x)
{
int i,j;
//ITEREZ PANA LA RADACINI
for (i=x; parent[i]!=i; i=parent[i]);
//Compresia de drumuri
for (; x!=i; parent[x]=i, x=j);
{
j=parent[x];
}
return i;
}
void unite(int x,int y)
{
if (rang[x]>rang[y])
parent[y]=x;
else
parent[x]=y;
if (rang[x]==rang[y])
++rang[y];
}
int main()
{
int cmd,x,y,i,k;
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
scanf("%d%d",&n,&m);
//INITIALIZARE
for (i=1; i<=n; rang[i]=1, parent[i]=i, ++i);
//PARSARE
for (k=1; k<=m; ++k)
{
scanf("%d%d%d",&cmd,&x,&y);
if (cmd==1)
{
unite(find(x),find(y));
}
else
{
if (find(x)==find(y))
printf("DA\n");
else
printf("NU\n");
}
}
return 0;
}