Pagini recente » Cod sursa (job #1064417) | Cod sursa (job #1818725) | Cod sursa (job #294911) | Cod sursa (job #126978) | Cod sursa (job #1314560)
#include<fstream>
#include<vector>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
vector<int> RANK, LEADER;
int n, Q;
int Find(int v) {
if(LEADER[v] == 0) return v;
else return Find(LEADER[v]);
}
void Union (int r1, int r2) {
if(RANK[r1] < RANK[r2]) {
LEADER[r1] = r2;
} else if(RANK[r1] > RANK[r2]) {
LEADER[r2] = r1;
} else {
LEADER[r1] = r2;
RANK[r2] ++;
}
}
int main() {
fin>>n>>Q;
RANK.resize(n+1, 0);
LEADER.resize(n+1, 0);
int type; int a, b;
for(int i=1; i<=Q; i++) {
fin>>type>>a>>b;
if(type == 1) {
Union(Find(a), Find(b));
}
else {
fout<< ((Find(a) == Find(b))?"DA":"NU") <<'\n';
}
}
}