Pagini recente » Cod sursa (job #983044) | Cod sursa (job #1287648) | Cod sursa (job #1968165) | Cod sursa (job #1638912) | Cod sursa (job #2413442)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int radacina(int v[], int x)
{
while (x != v[x])
{
v[x] = v[v[x]];
x = v[x];
}
return x;
}
void reuniune(int v[], int l[], int x, int y)
{
if (l[radacina(v, x)] < l[radacina(v, y)])
{
v[radacina(v, x)] = v[radacina(v, y)];
}
else
{
v[radacina(v, y)] = v[radacina(v, x)];
l[radacina(v, x)]++;
}
}
void verificare(int v[], int l[], int x, int y)
{
if (radacina(v, x) == radacina(v, y))
g<<"DA\n";
else
g<<"NU\n";
}
int main()
{
int N = 0, M;
int cod, x, y;
f>>N>>M;
int v[N+1], l[N+1];
for (int i = 1; i <= N; i++)
v[i] = i, l[i] = 1;
for (int i = 1; i <= M; i++)
{
f>>cod>>x>>y;
switch(cod)
{
case 1: reuniune(v, l, x, y); break;
case 2: verificare(v, l, x, y); break;
default: break;
}
}
return 0;
}