Pagini recente » Cod sursa (job #1489835) | Cod sursa (job #1030022) | Cod sursa (job #1670240) | Cod sursa (job #223649) | Cod sursa (job #2239471)
#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]=dd[x];
else dd[x]=dd[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(find(x), find(y));
else
{
if(find(x)==find(y)) g << "DA\n";
else g << "NU\n";
}
}
return 0;
}