Pagini recente » Cod sursa (job #1916314) | Cod sursa (job #1736231) | Cod sursa (job #2479892) | Cod sursa (job #1682379) | Cod sursa (job #3178839)
#include <fstream>
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
int n,m,i,v[100001],duparank[100001];
bool gaseste(int nod1,int nod2)
{
int p1=nod1,p2=nod2;
while(v[p1]!=p1)
p1=v[p1];
while(v[p2]!=p2)
p2=v[p2];
if(p1==p2)
return 1;
return 0;
}
void unim(int nod1,int nod2)
{
int p1=nod1,p2=nod2;
while(v[p1]!=p1)
p1=v[p1];
while(v[p2]!=p2)
p2=v[p2];
if(duparank[p1]>duparank[p2])
v[p2]=p1;
else if(duparank[p1]<duparank[p2])
v[p1]=p2;
else
{
v[p2]=p1;
duparank[p2]++;
}
return ;
}
int main()
{
cin>>n>>m;
for(i=1; i<=n; i++)
{
v[i]=i;
duparank[i]=1;
}
for(i=1; i<=m; i++)
{
int c,n1,n2;
cin>>c>>n1>>n2;
if(c==1)
unim(n1,n2);
else
{
bool este = gaseste(n1,n2);
if(este)
cout<<"DA"<<'\n';
else
cout<<"NU"<<'\n';
}
}
return 0;
}