Pagini recente » Cod sursa (job #113804) | Cod sursa (job #3042178) | Cod sursa (job #198739) | Cod sursa (job #3158892) | Cod sursa (job #698357)
Cod sursa(job #698357)
#include<stdio.h>
#include<cstring>
using namespace std;
FILE *f,*g;
int n,m,t[100002],h[100002];
int main()
{
int k,i,j,x,y,tip,hh;
f=fopen("disjoint.in","rt");
g=fopen("disjoint.out","wt");
fscanf(f,"%d %d",&n,&m);
for(i=1;i<=n;i++)
h[i]=1;
for(k=1;k<=m;k++)
{
fscanf(f,"%d %d %d",&tip,&x,&y);
if(tip==1)
{
for(i=x;t[i]!=0;i=t[i]);
for(j=y;t[j]!=0;j=t[j]);
if(h[i]>h[j])
{
h[j]=0;
t[j]=i;
for(j=y;t[j]!=0;j=t[j])
t[j]=i;
}
else
{
if(h[i]<h[j])
{
h[i]=0;
t[i]=j;
for(i=x;t[i]!=0;i=t[i])
t[i]=j;
}
else
{
hh=0;
t[j]=i;
if(h[i]==1)
h[i]++;
else
{
for(j=y;t[j]!=0;j=t[j])
{
hh++;
t[j]=i;
}
h[i]+=h[i]-hh;
}
}
}
}
else
{
for(i=x;t[i]!=0;i=t[i]);
for(j=y;t[j]!=0;j=t[j]);
if(i==j)
fprintf(g,"DA\n");
else
fprintf(g,"NU\n");
}
}
fclose(f);
fclose(g);
return 0;
}