Pagini recente » Cod sursa (job #1397088) | Cod sursa (job #815896) | Cod sursa (job #987523) | Cod sursa (job #3155687) | Cod sursa (job #1159194)
#include <iostream>
#include <stdio.h>
using namespace std;
FILE *fin=fopen("disjoint.in","r");
FILE *fout=fopen("disjoint.out","w");
struct node
{
int prt;
int rg;
};
void make_set(node* element,int i)
{
element[i].prt=i;
element[i].rg=0;
}
int find_p(node* element,int x)
{
int R=x,y;
while(element[R].prt!=R)
R=element[R].prt;
while(element[x].prt!=x)
{
y=element[x].prt;
element[x].prt=R;
x=y;
}
return R;
}
void link(node* element,int x, int y)
{
if(element[x].rg>element[y].rg)
element[y].prt=x;
else
element[x].prt=y;
if(element[x].rg==element[y].rg)
element[y].rg++;
}
void unite(node* element,int x, int y)
{
link(element,find_p(element,x),find_p(element,y));
}
int main()
{
int n,m;
fscanf(fin,"%d %d",&n,&m);
node element[n+6];
for(int i=1;i<=n;i++)
{make_set(element,i);}
int op,el1,el2;
for(int i=1;i<=m;i++)
{
fscanf(fin,"%d %d %d",&op,&el1,&el2);
if(op==2)
{
if(find_p(element,el1)==find_p(element,el2))
fprintf(fout, "DA\n");
else
fprintf(fout, "NU\n");
}
else
unite(element,el1,el2);
}
return 0;
}