Pagini recente » Cod sursa (job #3249977) | Cod sursa (job #706301) | Cod sursa (job #2132111) | Cod sursa (job #2333347) | Cod sursa (job #605272)
Cod sursa(job #605272)
#include<fstream.h>
ifstream f("disjoint.in");
ofstream g("disjoint.out");
struct node
{ int deg;
node *father;
} v[100005],*p,*q,*w,*r;
int n,m,op,x,y;
void reunion()
{ p=&v[x];
while(p->father) p=p->father;
q=&v[y];
while(q->father) q=q->father;
if(p->deg > q->deg) q->father=p;
else if(p->deg < q->deg) p->father=q;
else q->father=p, ++ p->deg;
}
int que()
{ p=&v[x];
q=&v[y];
while(p->father) p=p->father;
while(q->father) q=q->father;
w=&v[x];
while(w!=p) r=w->father, w->father=p, w=r;
w=&v[y];
while(w!=q) r=w->father, w->father=q, w=r;
if(p==q) return 1;
return 0;
}
int main()
{ f>>n>>m;
while(m)
{ f>>op>>x>>y;
if(op==1) reunion();
else que() ? g<<"DA\n" : g<<"NU\n" ;
--m;
}
f.close(); g.close();
return 0;
}