Pagini recente » Borderou de evaluare (job #2574611) | Borderou de evaluare (job #1047326) | Borderou de evaluare (job #1705582) | Cod sursa (job #3320232) | Cod sursa (job #3349862)
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
const int NMAX=100007;
int n,m;
int p,a,b;
int dad[NMAX];
int len[NMAX];
int get_dad(int nr)
{
int nod=nr;
while(dad[nod]>0)
{
nod=dad[nod];
}
return nod;
}
bool predict(int a,int b)//1=da, 0=nu
{
if(get_dad(a)==get_dad(b))
{
return 1;
}
return 0;
}
void merg(int a,int b)
{
int dad1=get_dad(a);
int dad2=get_dad(b);
if(len[dad1]<len[dad2])
{
dad[dad1]=dad2;
}
else if(len[dad1]>len[dad2])
{
dad[dad2]=dad1;
}
else
{
dad[dad1]=dad2;
len[dad2]++;
}
}
int main()
{
in>>n>>m;
for(int i=1;i<=m;i++)
{
in>>p>>a>>b;
if(p==1)
{
merg(a,b);
}
else
{
if(predict(a,b)==1)
{
out<<"DA\n";
}
else
{
out<<"NU\n";
}
}
}
}