Pagini recente » Cod sursa (job #589979) | Cod sursa (job #1145925) | Cod sursa (job #2390690) | Cod sursa (job #614548) | Cod sursa (job #1158712)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
void initialize(int n, int* parinte, int* r)
{
for(int i=1;i<=n;i++)
{
parinte[i]=i;
r[i]=0;
}
}
int f(int x,int* parinte)
{
if(parinte[x]!=x)
{
parinte[x]=f(parinte[x],parinte);
}
if(parinte[x]==x)
return x;
}
void link(int x,int y, int* parinte,int* r)
{
if(r[x]<=r[y])
{
parinte[x]=y;
if(r[x]==r[y])
r[x]++;
}
else
{
parinte[y]=x;
}
}
void unite(int x,int y,int* parinte,int* r)
{
link(f(x,parinte),f(y,parinte),parinte,r);
}
int main()
{
int n,m;
in>>n>>m;
int parinte[n+6];
int r[n+6];
initialize(n+6,parinte,r);
int op,j,k;
for(int i=1;i<=m;i++)
{
in>>op>>j>>k;
if(op==1)
{
unite(j,k,parinte,r);
}
if(op==2)
{
if(f(j,parinte)==k)
out<<"DA"<<endl;
else
out<<"NU"<<endl;
}
}
return 0;
}