Pagini recente » Cod sursa (job #2718713) | Cod sursa (job #2719593) | Cod sursa (job #2541125) | Cod sursa (job #1515504)
#include <cstdio>
using namespace std;
FILE *f=fopen("disjoint.in","r");
FILE *g=fopen("disjoint.out","w");
int n,m;
int TT[100010],h[100010];
int interogate(int x)
{
int i,aux;
for(i=x;TT[i]!=i;i=TT[i]);
while(TT[x]!=x)
{
aux=x;
x=TT[x];
TT[aux]=i;
}
return i;
}
void joint(int x,int y)
{
if(h[x]>h[y]) TT[y]=x;
else if(h[x]<h[y])TT[x]=y;
else {TT[x]=y;h[y]++;}
}
int main()
{
int i,c,x,y;
fscanf(f,"%d %d",&n,&m);
for(i=1;i<=n;i++){TT[i]=i;h[i]=1;}
for(i=1;i<=m;i++)
{
fscanf(f,"%d %d %d",&c,&x,&y);
if(c==1) joint(interogate(x),interogate(y));
else
if(interogate(x)==interogate(y))fprintf(g,"DA\n");
else fprintf(g,"NU\n");
}
fclose(f);
fclose(g);
return 0;
}