Pagini recente » Cod sursa (job #342973) | Cod sursa (job #459213) | Cod sursa (job #3182512) | Cod sursa (job #1384735) | Cod sursa (job #1261936)
#include<fstream>
#define NMAX 100010
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n, m, padure[NMAX];
int tata(int nod)
{
if (padure[nod]>0) return tata(padure[nod]);
return nod;
}
int uneste(int x, int y)
{
int s, tx=tata(x), ty=tata(y);
int aux=padure[tx]+padure[ty];
while (x!=tx)
{
s=padure[x];
padure[x]=tx;
x=s;
}
while (y!=ty)
{
s=padure[y];
padure[y]=ty;
y=s;
}
if (padure[tx]>padure[ty])
{
padure[tx]=ty;
padure[ty]=aux;
}
else
{
padure[ty]=tx;
padure[tx]=aux;
}
}
bool interogheaza(int x, int y)
{
if (tata(x)==tata(y)) return 1;
return 0;
}
int main()
{
int op, x, y;
f>>n>>m;
for (int i=0; i<n; ++i) padure[i]=-1;
while (m--)
{
f>>op>>x>>y;
if (op==1) uneste(x, y);
else if (interogheaza(x, y)) g<<"DA\n"; else g<<"NU\n";
}
f.close();
g.close();
return 0;
}