Pagini recente » Diferente pentru problema/triunghi3 intre reviziile 2 si 1 | Diferente pentru problema/colonii intre reviziile 7 si 6 | Diferente pentru utilizator/hera intre reviziile 1 si 2 | Diferente pentru problema/aliniere intre reviziile 10 si 9 | Cod sursa (job #2658789)
#include <fstream>
#include <vector>
using namespace std;
ifstream f ("disjoint.in");
ofstream g ("disjoint.out");
int n, m;
int poz[100005];
vector < int > v[100005];
void Unire (int x, int y)
{
if (poz[x] == poz[y])
return;
if (v[poz[x]].size() <= v[poz[y]].size())
{
int aux = poz[y];
for (int i=0; i<v[aux].size(); i++)
{
v[poz[x]].push_back(v[aux][i]);
poz[v[aux][i]] = poz[x];
}
v[aux].clear();
}
else
{
int aux = poz[x];
for (int i=0; i<v[aux].size(); i++)
{
v[poz[y]].push_back(v[aux][i]);
poz[v[aux][i]] = poz[y];
}
v[aux].clear();
}
}
void Querry (int x, int y)
{
if (poz[x] == poz[y])
g << "DA" << "\n";
else g << "NU" << "\n";
}
int main()
{
f >> n >> m;
for (int i=1; i<=n; i++)
{
v[i].push_back(i);
poz[i] = i;
}
while (m --)
{
int type, x, y;
f >> type >> x >> y;
if (type == 1) Unire(x, y);
else Querry(x, y);
}
return 0;
}