Pagini recente » Cod sursa (job #1462594) | Cod sursa (job #3321495) | Cod sursa (job #3314144) | Cod sursa (job #748808) | Cod sursa (job #3316025)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
class united
{
private:
vector<int> p,siz;
public:
united(int n)
{
siz.resize(n+1,1);
p.resize(n+1);
for(int i=1;i<=n;i++) p[i]=i;
}
int sef(int x)
{
if(x==p[x]) return x;
p[x]=sef(p[x]);
return p[x];
}
void unite(int x,int y)
{
x=sef(x);
y=sef(y);
if(x==y) return;
if(siz[x]<siz[y]) swap(x,y);
siz[x]+=siz[y];
p[y]=x;
return;
}
bool samecomp(int x,int y)
{
return (sef(x)==sef(y));
}
};
int main()
{
int n,m;
fin>>n>>m;
united dsu(n);
while(m--)
{
int tip,x,y;
fin>>tip>>x>>y;
if(tip==1) dsu.unite(x,y);
else
{
if(dsu.samecomp(x,y)) fout<<"DA"<<'\n';
else fout<<"NU"<<'\n';
}
}
return 0;
}