Pagini recente » Cod sursa (job #331056) | Cod sursa (job #617039) | Cod sursa (job #70945) | Cod sursa (job #998614) | Cod sursa (job #1158714)
#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);
}
return parinte[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)
{
int i=f(x,parinte),j=f(y,parinte);
if(i!=j)
link(i,j,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;
}