Pagini recente » Cod sursa (job #2705236) | Cod sursa (job #2641460) | Cod sursa (job #2770591) | Cod sursa (job #3249678) | Cod sursa (job #515451)
Cod sursa(job #515451)
#include<fstream>
using namespace std;
#define NMAX 100000
const char infile[]="disjoint.in";
const char outfile[]="disjoint.out";
int N;
int M;
struct Nod
{
Nod* tata;
int indice;
int rang;
};
Nod A[NMAX];
void init()
{
for(int i=1;i<=N;i++)
{
A[i].tata=NULL;
A[i].rang=1;
A[i].indice=i;
}
}
int parinte(int x)
{
int a=x;
int b;
while(A[x].tata!=NULL)
{
x=A[x].tata->indice;
}
while(A[a].tata!=NULL)
{
b=a;
a=A[a].tata->indice;
A[b].tata=&A[x];
}
return x;
}
void uneste(int x,int y)
{
int a=parinte(x);
int b=parinte(y);
if(A[a].rang>A[b].rang)
{
A[b].tata=&A[a];
A[a].rang+=A[b].rang;
}
else
{
A[a].tata=&A[b];
A[b].rang+=A[a].rang;
}
}
void afisare(const char *s,fstream &fout)
{
fout<<s<<"\n";
}
void citire()
{
fstream fin(infile,ios::in);
fstream fout(outfile,ios::out);
fin>>N;
init();
fin>>M;
int x,y,z;
for(int i=1;i<=M;i++)
{
fin>>x;
switch(x)
{
case(1):
fin>>y>>z;
uneste(y,z);
break;
case(2):
fin>>y>>z;
if(parinte(y) == parinte(z))
afisare("DA",fout);
else
afisare("NU",fout);
break;
}
}
}
int main()
{
citire();
}