Pagini recente » Cod sursa (job #2421805) | Cod sursa (job #2321125) | Cod sursa (job #2353723) | Cod sursa (job #1092377) | Cod sursa (job #2289923)
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#define nmax 100005
using namespace std;
FILE *fin,*fout;
int n,m,t[nmax],r[nmax];
int cauta(int x)
{
int y,i;
for(i=x;t[i]!=i;i=t[i]);
while(t[x]!=x)
{
y=t[x];
t[x]=i;
x=y;
}
return i;
}
void unite(int x,int y)
{
r[x]>r[y]?t[y]=x:t[x]=y;
r[y]+=(r[x]==r[y]);
}
int main()
{
fin=fopen("disjoint.in","r");
fout=fopen("disjoint.out","w");
int x,y,o,f1,f2;
fscanf(fin,"%d %d",&n,&m);
for(int i=1;i<=n;i++)
t[i]=i,r[i]=1;
for(int i=1;i<=m;i++)
{
fscanf(fin,"%d %d %d",&o,&x,&y);
f1=cauta(x);
f2=cauta(y);
if(o==1)
unite(f1,f2);
else
f1==f2?fprintf(fout,"DA\n"):fprintf(fout,"NU\n");
}
return 0;
}