Pagini recente » Cod sursa (job #2232619) | Cod sursa (job #75179) | Cod sursa (job #924776) | Cod sursa (job #997386) | Cod sursa (job #2730303)
#include <fstream>
using namespace std;
int Find(int nod, int Father[]) {
int Rep = nod, temp;
while(Rep != Father[Rep])
Rep = Father[Rep];
while(nod != Father[nod]) {
temp = Father[nod];
Father[nod] = Rep;
nod = temp;
}
return Rep;
}
void Union(int x, int y, int Father[], int Rank[]) {
int RepX = Find(x, Father), RepY = Find(y, Father);
if(Rank[RepX] > Rank[RepY]) {
++Rank[RepX];
Father[RepY] = RepX;
}
else {
++Rank[RepY];
Father[RepX] = RepY;
}
}
int main() {
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m, q, x, y, Father[100001], Rank[100001] {};
fin >> n >> m;
for(int i = 1; i <= n; ++i)
Father[i] = i;
while(m--) {
fin >> q >> x >> y;
if(q == 1)
Union(x, y, Father, Rank);
else
fout << (Find(x, Father) == Find(y, Father) ? "DA\n" : "NU\n");
}
}