Pagini recente » Cod sursa (job #1984906) | Cod sursa (job #3267079)
#include <bits/stdc++.h>
using namespace std;
#define inFile "disjoint.in"
#define outFile "disjoint.out"
FILE *in = fopen(inFile, "r");
FILE *out = fopen(outFile, "w");
#define maxSize 1000002
#define inf 0x3f3f3f3f
int comParent[maxSize], comSize[maxSize];
int findParent(int node) {
while (node != comParent[node]) node = comParent[node];
return node;
}
bool isSameComp(int nodeA, int nodeB) {
return findParent( nodeA ) == findParent( nodeB );
}
bool connectNodes(int nodeA, int nodeB) {
nodeA = findParent( nodeA );
nodeB = findParent( nodeB );
if (comSize[nodeA] < comSize[nodeB]) swap(nodeA, nodeB);
comParent[nodeB] = nodeA; comSize[nodeA] += comSize[nodeB];
}
int main( ) {
int numNodes, numEdges; fscanf(in, "%d %d", &numNodes, &numEdges);
for (int i = 1; i <= numNodes; ++i) {
comSize[i] = 1;
comParent[i] = i;
}
for (int i = 0; i < numEdges; ++i) {
int task; fscanf(in, "%d", &task);
int nodeA, nodeB; fscanf(in, "%d %d", &nodeA, &nodeB);
switch ( task ) {
case 1: connectNodes(nodeA, nodeB); break;
case 2:
if (isSameComp(nodeA, nodeB)) fprintf(out, "DA\n");
else fprintf(out, "NU\n");
break;
}
}
return 0;
}