Pagini recente » Rating Carmelia Seigler (bevff404) | Cod sursa (job #1506548) | Cod sursa (job #128927) | Cod sursa (job #1290414) | Cod sursa (job #1138940)
#include<fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int val[100001], size[100001];
void init(int n) {
for(int i = 1; i <= n; i++) {
val[i] = i;
size[i] = 1;
}
}
int parent(int u) {
int u2 = u, aux;
while(u != val[u]) u = val[u];
while(u2 != u) {
aux = val[u2];
val[u2] = u;
u2 = aux;
}
return u;
}
void union_elements(int u, int v) {
int pu, pv;
pu = parent(u);
pv = parent(v);
if(size[pu] < size[pv]) val[pu] = pv;
if(size[pu] > size[pv]) val[pv] = pu;
if(size[pu] == size[pv]) {
val[pu] = pv;
size[pu]++;
}
}
bool find_elements(int u, int v) {
return parent(u) == parent(v);
}
int main() {
int n, m, i, t, a, b;
fin >> n >> m;
init(n);
for(i = 0; i < m; i++) {
fin >> t >> a >> b;
if(t == 1) union_elements(a, b);
else {
if(find_elements(a, b) == true) fout << "DA\n";
else fout << "NU\n";
}
}
return 0;
}