Pagini recente » Cod sursa (job #752782) | Cod sursa (job #2088394) | Cod sursa (job #2450798) | Cod sursa (job #2819850) | Cod sursa (job #945859)
Cod sursa(job #945859)
#include <fstream>
#include <vector>
#define MAXN 100005
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
struct nod{
int lvl;
nod *tata;};
int n,m,tip,x,y;
bool da;
nod *ref[MAXN];
void uneste(int a,int b);
bool query(int a,int b);
int main()
{
int i;
f>>n>>m;
for(i=1;i<=n;i++){
ref[i]=new nod;
ref[i]->tata=NULL;
ref[i]->lvl=1;}
for(i=1;i<=m;i++){
f>>tip>>x>>y;
if(tip==1)
uneste(x,y);
else{
if(query(x,y))
g<<"DA\n";
else
g<<"NU\n";}}
f.close();
g.close();
return 0;
}
void uneste(int a,int b){
nod *p,*q;
p=ref[a];
q=ref[b];
while(p->tata!=NULL)
p=p->tata;
while(q->tata!=NULL)
q=q->tata;
if((p->lvl)<(q->lvl))
p->tata=q;
else{
q->tata=p;
if(q->lvl+1>p->lvl)
(p->lvl)++;}}
bool query(int a,int b){
nod *p,*q,*p1,*q1,*aux;
p=p1=ref[a];
q=q1=ref[b];
while(p->tata!=NULL)
p=p->tata;
while(q->tata!=NULL)
q=q->tata;
while(p1->tata!=NULL){
aux=p1->tata;
p1->tata=p;
p1=aux;}
while(q1->tata!=NULL){
aux=q1->tata;
q1->tata=q;
q1=aux;}
return (p==q);}