Pagini recente » Cod sursa (job #602891) | Statistici Eugen Neagoe (eneagoe) | Cod sursa (job #2297175) | Cod sursa (job #1482392) | Cod sursa (job #1453417)
#include <iostream>
#include <fstream>
#include <cstring>
#include <algorithm>
#include <string>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <iterator>
#include <queue>
#include <functional>
#include <utility>
#define FOR(start,end) for(int i = start; i<end; ++i)
#define MAX 252
using namespace std;
ifstream fin("fisier.in");
ofstream fout("fisier.out");
int findSet(int i);
bool inSameSet(int i, int j);
void unionSet(int i, int j);
int p[100001], Rank[100001];
int main() {
int n, i, j, t, op, m;
fin >> n >> m;
for (i = 1; i <= n; ++i) {
p[i] = i;
Rank[i] = 1;
}
for (t = 0; t < m; ++t) {
fin >> op >> i >> j;
if (op == 1)
unionSet(i, j);
else {
if (inSameSet(i, j))
fout << "DA\n";
else
fout << "NU\n";
}
}
return 0;
}
int findSet(int i) {
if (p[i] == i)
return i;
return p[i] = findSet(p[i]);
}
bool inSameSet(int i, int j) {
return findSet(i) == findSet(j);
}
void unionSet(int i, int j) {
int x = findSet(i);
int y = findSet(j);
if (Rank[x] > Rank[y])
p[y] = x;
else {
p[x] = y;
if (Rank[x] == Rank[y])
++Rank[y];
}
}