Pagini recente » Cod sursa (job #1805933) | Cod sursa (job #788200) | Cod sursa (job #275747) | Cod sursa (job #1298334) | Cod sursa (job #2420163)
#include <iostream>
FILE * fin= fopen("disjoint.in","r");
FILE * fout= fopen("disjoint.out","w");
int id[100500];
int siz[100500];
int n,m;
int root(int x)
{
while(x!=id[x])
{
id[x]=id[id[x]];
x= id[x];
}
return x;
}
void unite(int x, int y)
{
x= root(x);
y= root(y);
if(x!=y)
{
if(siz[x]>siz[y])
{
siz[x]+=siz[y];
id[y]=x;
}
else
{
siz[y]+=siz[x];
id[x]=y;
}
}
}
void write()
{
for(int i=1;i<=n;i++)
std::cout<<root(i)<<" ";
std::cout<<"\n";
}
int main()
{
fscanf(fin,"%d %d",&n,&m);
for(int i=1;i<=n;i++)
id[i]=i;
for(int i=0;i<m;i++)
{
int c,x,y;
fscanf(fin,"%d %d %d",&c,&x,&y);
if(c==1)
unite(x,y);
else
{
if(root(x)==root(y))
fprintf(fout,"DA\n");
else
fprintf(fout,"NU\n");
}
}
}