Pagini recente » Cod sursa (job #573297) | Cod sursa (job #911248) | Cod sursa (job #827363) | Cod sursa (job #1538006) | Cod sursa (job #1248926)
#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 (Root[nod]==nod) return nod;
else return Find_root(Root[nod]);
}
void unite ( int a, int b)
{
if (Rank[a]>Rank[b]) Root[b]=a;
else
if (Rank[a]<Rank[b]) Root[a]=b;
else {
Root[a]=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;
int r1=Find_root(a);
int r2=Find_root(b);
if (op==1) unite(r1,r2);
if (op==2){
if (r1==r2) cout<<"DA\n";
else cout<<"NU\n";
}
}
return 0;
}