Pagini recente » Cod sursa (job #2796283) | Monitorul de evaluare | Cod sursa (job #2769010) | Cod sursa (job #2082347) | Cod sursa (job #2935481)
// Paduri de multimi disjuncte
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int r[100001], v[100001], n, m;
int find(int x)
{
int rad, y;
for(rad = x; rad != v[rad]; rad = v[rad]);
for(; x != rad; x = y)
{
y = v[x];
v[x] = rad;
}
return rad;
}
void unite(int x, int y)
{
if(r[x] > r[y])
v[y] = x;
else if(r[x] < r[y])
v[x] = y;
else
{
v[x] = y;
r[y]++;
}
}
int main()
{
int i, x, y, cod;
f >> n >> m;
for (i = 1; i <= n; i++)
{
v[i] = i;
r[i] = 1;
}
for(i = 1; i <= m; i++)
{
f >> cod >> x >> y;
if(cod == 1)
{
if(find(x) == find(y))
g << i;
else
unite(find(x), find(y));
}
else
{
if(find(x) == find(y))
g << "DA" << '\n';
else
g << "NU" << '\n';
}
}
return 0;
}