Pagini recente » Cod sursa (job #2715189) | Cod sursa (job #68447) | Cod sursa (job #2811063) | Cod sursa (job #1925399) | Cod sursa (job #2682255)
//
// main.cpp
// union find
//
// Created by Radu Costache on 07/12/2020.
// Copyright © 2020 Radu Costache. All rights reserved.
//
#include <fstream>
#define NMAX 100005
using namespace std;
int n, q;
int parent[NMAX], rang[NMAX];
inline void Union(int, int);
inline int Find(int);
int main(int argc, const char * argv[]) {
// insert code here...
ifstream f("disjoint.in");
ofstream g("disjoint.out");
f >> n >> q;
for (int i = 1; i <= n; ++i)
parent[i] = i;
while (q--) {
int type, x, y;
f >> type >> x >> y;
switch (type) {
case 1:
Union(x, y);
break;
case 2:
if (Find(x) == Find(y))
g << "DA\n";
else g << "NU\n";
break;
}
}
return 0;
}
inline int Find(int node) {
if (parent[node] != node)
parent[node] = Find(parent[node]);
return parent[node];
}
inline void Union(int x, int y) {
int px = Find(x);
int py = Find(y);
if (px == py)
return;
if (rang[px] < rang[py])
parent[px] = py;
else if (rang[px] > rang[py])
parent[py] = px;
else {
parent[px] = py;
++rang[py];
}
}