Pagini recente » Cod sursa (job #3260396) | Cod sursa (job #2325464) | Cod sursa (job #1709054) | Cod sursa (job #1265992) | Cod sursa (job #2944656)
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
int i, n, m, op, x, y;
vector<int>parent;
vector<int>rang;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int find(int x)
{
while (parent[x] != x)
{
parent[x] = parent[parent[x]];
x = parent[x];
}
return x;
}
void reuniune(int x, int y) {
int i = find(x);
int j = find(y);
if (rang[i] > rang[j])
{
parent[j] = parent[i];
rang[i]++;
}
else
{
parent[i] = parent[j];
rang[j]++;
}
}
int main() {
f >> n >> m;
parent.resize(n + 1);
rang.resize(n+1);
for (i = 1; i <= n; i++)
{
parent[i] = i;
rang[i] = 1;
}
for(i=1;i<=m;i++)
{
f >> op;
if (op == 1) {
f >> x >> y;
reuniune(x, y);
}
else {
f >> x >> y;
if (find(x) == find(y))
g << "DA\n";
else
g << "NU\n";
}
}
}