Pagini recente » Cod sursa (job #3003172) | Cod sursa (job #1788456) | Cod sursa (job #2815288) | Cod sursa (job #1627543) | Cod sursa (job #2837323)
#include <bits/stdc++.h>
#define LMAX 100001
using namespace std;
const int NMAX=1e5+5;
int p[NMAX],r[NMAX];
int Find(int u){
return p[u]=(u==p[u]?u:Find(p[u]));
}
void Union(int u, int v){
u=Find(u),v=Find(v);
if(u==v) return;
if(p[u]>p[v]) u^=v,v^=u,u^=v;
p[u]=v,r[v]+=r[u];
}
int main()
{
FILE* fin=fopen("disjoint.in","r");
FILE* fout=fopen("disjoint.out","w");
int n,q;
fscanf(fin,"%d%d",&n,&q);
for(int i=1;i<=n;i++) r[i]=1,p[i]=i;
while(q--){
int t,u,v;
fscanf(fin,"%d%d%d",&t,&u,&v);
if(t==1)
Union(u,v);
else fprintf(fout,Find(u)==Find(v)?"DA\n":"NU\n");
}
return 0;
}