Pagini recente » Cod sursa (job #2002487) | Autentificare | Cod sursa (job #1129543) | Cod sursa (job #970525) | Cod sursa (job #2199076)
#include <stdio.h>
using namespace std;
FILE *f,*g;
int n,m;
int tata[100002],rang[100002];
void read()
{
fscanf(f,"%d %d",&n,&m);
for(int i=1;i<=n;i++)
tata[i]=i,rang[i]=1;
}
int Find(int node)
{
int r=node,aux;
while(r!=tata[r])
r=tata[r];
while(node!=tata[node])
{
aux=tata[node];
tata[node]=r;
node=aux;
}
return r;
}
void unite(int x, int y)
{
if(rang[x]>rang[y])
tata[y]=x;
else
tata[x]=y;
if(rang[y]==rang[x])
rang[y]++;
}
int main()
{
f=fopen("disjoint.in","r");
g=fopen("disjoint.out","w");
read();
int x,y,cod;
for(int i=1;i<=m;i++)
{
fscanf(f,"%d %d %d",&cod,&x,&y);
if(cod==2)
{
if(Find(x)==Find(y))
fprintf(g,"DA\n");
else
fprintf(g,"NU\n");
}
else
unite(Find(x),Find(y));
}
return 0;
}