Pagini recente » Cod sursa (job #2745775) | Cod sursa (job #1969272) | Cod sursa (job #557781) | Cod sursa (job #674422) | Cod sursa (job #2231474)
#include <iostream>
#include <fstream>
#include <map>
#include <vector>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n, m, op, x, y;
class Disjoint {
private:
int sz;
vector<int> parent;
vector<int> rnk;
public:
Disjoint(int szz) : sz(szz + 1) {
parent.resize(sz);
rnk.resize(sz);
for (int i = 0; i < sz; i++) {
parent[i] = i;
rnk[i] = 0;
}
}
void Uneste(int x, int y) {
if(rnk[y] >= rnk[x])
{
if(rnk[y] == rnk[x])
rnk[y]++;
parent[x] = y;
}
else parent[y] = x;
}
int FindSet(int x) {
if (parent[x] != x) {
parent[x] = FindSet(parent[x]);
}
return parent[x];
}
};
int main()
{
f>>n>>m;
Disjoint d(n);
for(;m;m--)
{
f>>op>>x>>y;
if(op == 1)
d.Uneste(d.FindSet(x), d.FindSet(y));
else {
if(d.FindSet(x) == d.FindSet(y))
g<<"DA"<<endl;
else g<<"NU"<<endl;
}
}
return 0;
}