Pagini recente » Cod sursa (job #437478) | Cod sursa (job #1176623) | Cod sursa (job #2944527) | Cod sursa (job #663726) | Cod sursa (job #2772386)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int MMax=100008;
int n,m,TT[MMax];
struct muchie{
int cod,x,y;
}v[MMax];
void read(){
fin>>n>>m;
int i;
for(i=1;i<=m;i++)
fin>>v[i].cod>>v[i].x>>v[i].y;
}
int Find(int Nod) {
while(TT[Nod]!=Nod)
Nod=TT[Nod];
return Nod;
}
void unire(int x, int y) {
if(x<y) {
TT[y]=x;
//for(int i=1;i<=n;i++)
// if(TT[x]==i)
// TT[y]=i;
}
if(x>=y) {
TT[x]=y;
//for(int i=1;i<=n;i++)
// if(TT[y]==i)
// TT[x]=i;
}
}
void solve() {
int q,w;
for(int i=1;i<=m;i++) {
if(v[i].cod==1) {
if(Find(v[i].x) != Find(v[i].y)) {
unire(Find(v[i].x), Find(v[i].y));
}
} else {
if(v[i].cod==2)
{
q=Find(v[i].x);
w=Find(v[i].y);
if(q==w) {
fout<<"DA"<<'\n';
}
else {if(q!=w)
fout<<"NU"<<'\n';
}
}
}
}
}
int main()
{
read();
for(int i=1;i<=m;i++)
{
TT[i]=i;
}
solve();
return 0;
}