Pagini recente » Cod sursa (job #413715) | Cod sursa (job #520174) | Cod sursa (job #2689791) | Cod sursa (job #634150) | Cod sursa (job #529766)
Cod sursa(job #529766)
#include <fstream>
using namespace std;
#define NMAX 100000
ifstream f("disjoint.in"); ofstream g("disjoint.out");
pair<int,int> sets[NMAX];
int set_find(int x) {
if (x==sets[x].first) return x;
int r = set_find(sets[x].first);
sets[x].first = r;
return r;
}
void set_union(int x, int y) {
int r1 = set_find(x);
int r2 = set_find(y);
if (sets[r1].second < sets[r2].second) {
sets[r1].first = r2;
}
else {
sets[r2].first = r1;
if (sets[r1].second == sets[r2].second) {
sets[r1].second++;
}
}
}
int main() {
int N, M, cod, x, y;
f>>N>>M;
for (int i=1;i<=N;i++) {
sets[i].first = i; sets[i].second = 0;
}
for (int i=1;i<=M;i++) {
f>>cod>>x>>y;
if (cod == 1) set_union(x,y);
else (set_find(x) == set_find(y)) ? g<<"DA\n":g<<"NU\n";
}
f.close(); g.close(); return 0;
}