Pagini recente » Cod sursa (job #267182) | Cod sursa (job #1159283) | Cod sursa (job #2626323) | Cod sursa (job #2261833) | Cod sursa (job #1542460)
#include <fstream>
using namespace std;
#define nmax 100001
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int root[nmax],rang[nmax];
int n,m,cod,x,y;
/*
int find(int a){
int t,i,x;
for(t=a;t!=root[t];t=root[t])
for(i=a;i!=t;)
{x=root[i];
root[i]=t;
i=x;}}
*/
int find(int a){
if(a!=root[a])
root[a]=find(root[a]);
return root[a];}
void unite(int a,int b){
int ta=find(a);
int tb=find(b);
if(ta!=tb)
//root[ta]=tb;
if(rang[ta]<rang[tb])
root[ta]=tb;
else
if(rang[ta]>rang[tb])
root[tb]=ta;
else
{root[ta]=tb;
rang[tb]++; }}
int main()
{
fin>>n>>m;
for(int i=1;i<=n;i++)
{rang[i]=1;
root[i]=i;}
for(int i=1;i<=m;i++){
fin>>cod;
fin>>x>>y;
if(cod==1)
unite(x,y);
else
if(find(x)==find(y))
fout<<"DA\n";
else
fout<<"NU\n";}
return 0;
}