Pagini recente » Cod sursa (job #1207283) | Cod sursa (job #3193471) | Cod sursa (job #2783073) | Cod sursa (job #1838867) | Cod sursa (job #1344791)
#include <iostream>
#include <cstdio>
#define nmax 100001
using namespace std;
FILE *f=fopen("disjoint.in","r"),*g=fopen("disjoint.out","w");
int t[nmax],r[nmax],n;
void unite(int x, int y)
{
if(r[x]>r[y])
t[y]=x;
else if(r[x]<r[y])
t[x]=y;
else
{
t[y]=x;
r[x]++;
}
}
int finds(int x)
{
int r,i;
for(r=x;t[r]!=r;r=t[r]);
for(;t[x]!=x;)
{
i=t[x];
t[x]=r;
x=i;
}
return r;
}
int main()
{
int i,j,m,tip,x,y;
fscanf(f,"%d %d",&n,&m);
for(i=1;i<=n;i++)
{
t[i]=i;
r[i]=1;
}
for(i=1;i<=m;i++)
{
fscanf(f,"%d %d %d",&tip,&x,&y);
if(tip==1&&finds(x)!=finds(y))
unite(finds(x),finds(y));
else if(tip==2)
{
if(finds(x)==finds(y))
fprintf(g,"DA\n");
else
fprintf(g,"NU\n");
}
}
fclose(f);
fclose(g);
return 0;
}