Pagini recente » Cod sursa (job #1181900) | Cod sursa (job #185174) | Cod sursa (job #2641188) | Cod sursa (job #2125994) | Cod sursa (job #1248901)
#include <fstream>
using namespace std;
ifstream cin("disjoin.in");
ofstream cout("disjoint.out");
int Root[100013], Rank[100013];
int n,i,j,m,a,b,op;
int Find_root( int nod)
{
if (nod!=Root[nod]) Root[nod]=Find_root(Root[nod]);
return Root[nod];
}
void unite ( int a, int b)
{
if (Rank[a]>Rank[b]) Root[b]=a;
else Root[a]=b;
if (Rank[a]==Rank[b]) ++Rank[b];
}
int main()
{
cin>>n>>m;
for (i=1;i<=n;++i) Root[i]=i, Rank[i]=1;
while(m--)
{
cin>>op>>a>>b;
if (op==1) unite(Find_root(a),Find_root(b));
if (op==2){
if (Find_root(a)==Find_root(b)) cout<<"DA\n";
else cout<<"NU\n";
}
}
return 0;
}