Pagini recente » Cod sursa (job #1352410) | Cod sursa (job #2504237) | Borderou de evaluare (job #2044265) | Borderou de evaluare (job #1736197) | Cod sursa (job #2270304)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int const nmax=100003;
int n,m;
int sz[nmax],mult[nmax];
int Find(int val)
{
int root=val;
while(mult[root]!=root) root=mult[root];
int aux;
while(mult[val]!=root)
{
aux=mult[val];
mult[val]=root;
val=aux;
}
return root;
}
void Union(int a, int b)
{
int rootA=mult[a];
int rootB=mult[b];
if(sz[rootA]<sz[rootB])
{
sz[rootB]+=sz[rootA];
mult[rootA]=rootB;
}
else
{
sz[rootA]+=sz[rootB];
mult[rootB]=rootA;
}
}
void solve()
{
int i,cod,x1,x2,m1,m2;
fin>>n>>m;
for(i=1;i<=n;++i) {sz[i]=1; mult[i]=i;}
for(i=1;i<=m;++i)
{
fin>>cod>>x1>>x2;
if(cod==1)
Union(x1,x2);
else
{
m1=Find(x1);
m2=Find(x2);
if(m1==m2) fout<<"DA"<<"\n";
else fout<<"NU"<<"\n";
}
}
}
int main()
{
solve();
return 0;
}