Pagini recente » Monitorul de evaluare | Cod sursa (job #3330632) | Cod sursa (job #3357477) | Cod sursa (job #3322665) | Cod sursa (job #2534985)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m, rang[100000], v[100000];
int radacina(int x)
{
int i=x, j;
while(v[i]!=i)
{
i=v[i];
}
while(v[x]!=x)
{
j=v[x];
v[x]=i;
x=j;
}
return i;
}
void unire(int x, int y)
{
if(rang[x]<rang[y])
{
v[x]=y;
}
else
{
v[y]=x;
}
if(rang[x]==rang[y])
rang[x]++;
}
int main()
{
int x, y, cod;
fin>>n>>m;
for(int i=1;i<=n;i++)
{
rang[i]=1;
v[i]=i;
}
for(int i=1;i<=m;i++)
{
fin>>cod>>x>>y;
if(cod==1)
{
unire(radacina(x),radacina(y));
}
else
{
if(radacina(x)==radacina(y))
fout<<"DA"<<endl;
else
fout<<"NU"<<endl;
}
}
}