Pagini recente » Cod sursa (job #2303107) | Cod sursa (job #3231927) | Cod sursa (job #234190) | Cod sursa (job #729404) | Cod sursa (job #2239470)
#include <fstream>
#define Nmax 100005
using namespace std;
string file="disjoint";
ifstream f( (file + ".in").c_str() );
ofstream g( (file + ".out").c_str() );
int cod, x, y;
int n, m;
int dd[Nmax], rg[Nmax];
int find(int x)
{
int r=dd[x], y;
while(r!=dd[r]) r=dd[r];
//compresie
while(dd[x]!=x)
{
y = dd[x];
dd[x] = r;
x = y;
}
return r;
}
void unite(int x, int y)
{
if(rg[x] > rg[y]) dd[y]=x;
else dd[x]=y;
if(rg[x] == rg[y])
rg[y]++;
}
int main()
{
f >> n >> m;
for ( int i = 1; i <= n; i ++ )
dd[i]=i, rg[i]=1;
while(m -- )
{
f >> cod >> x >> y;
if (cod == 1)
unite(x, y);
else
{
if(find(x)==find(y)) g << "DA\n";
else g << "NU\n";
}
}
return 0;
}