Pagini recente » Cod sursa (job #846688) | Cod sursa (job #704985) | Cod sursa (job #2488368) | Cod sursa (job #1119707) | Cod sursa (job #355521)
Cod sursa(job #355521)
#include<stdio.h>
#include<vector>
#include<list>
using namespace std;
int n,m;
vector <int> Tree,Rang;
int Find(int N)
{
int root,aux;
for(root=N;Tree[root]!=root;root=Tree[root]);
while(Tree[N]!=N)
{
aux=Tree[N];
Tree[N]=root;
N=aux;
}
return root;
}
void combine(int x,int y)
{
if(Rang[x]<Rang[y])
Tree[x]=y;
else
if(Rang[x]>Rang[y])
Tree[y]=x;
if(Rang[x]==Rang[y])
{
Tree[x]=y;
Rang[y]++;
}
}
int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
scanf("%d%d",&n,&m);
Tree.resize(n+1);
Rang.resize(n+1,1);
for(int i=1;i<=n;i++)
{
Tree[i]=i;
}
for(int i=0;i<m;i++)
{
int op,x,y;
scanf("%d%d%d",&op,&x,&y);
if(op==1)
{
combine(Find(x),Find(y));
}
else
{
Find(x)==Find(y) ? printf("DA\n") : printf("NU\n");
}
}
return 0;
}