Pagini recente » Cod sursa (job #2372721) | Cod sursa (job #1139571) | Cod sursa (job #2419333) | Cod sursa (job #2669029) | Cod sursa (job #2779430)
#include <fstream>
using namespace std;
struct Node {
int rnk = 0;
Node *prt = this;
};
static int N, M;
static Node *A[100001];
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
Node* findSet(Node *p) {
while (p != p->prt)
p = p->prt;
return p;
}
void unite(Node *a, Node *b) {
a = findSet(a);
b = findSet(b);
if (a != b) {
if (a->rnk > b->rnk) {
b->prt = a;
a->rnk = b->rnk+1;
} else {
a->prt = b;
b->rnk = a->rnk+1;
}
}
}
int main() {
fin >> N >> M;
for (int i=1; i<=N; i++)
A[i] = new Node;
for (int i=0; i<M; i++) {
int c, x, y;
fin >> c >> x >> y;
if (c == 1) unite(A[x], A[y]);
else fout << (findSet(A[x]) == findSet(A[y]) ? "DA\n" : "NU\n");
}
}