Pagini recente » Cod sursa (job #685232) | Cod sursa (job #1288655) | Cod sursa (job #1065114) | Cod sursa (job #2112941) | Cod sursa (job #1248895)
#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)
{
while(nod!=Root[nod]) nod=Root[nod];
return 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;
}