Pagini recente » Borderou de evaluare (job #3365139) | Borderou de evaluare (job #3366051) | Borderou de evaluare (job #3366777) | Cod sursa (job #3365501) | Cod sursa (job #3365749)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
vector<int> parent;
vector<int> rnk;
int Find(int x) {
if (x==parent[x]) {
return x;
}
return parent[x]=Find(parent[x]);
}
void Union(int a, int b) {
a=Find(a);
b=Find(b);
if (a!=b) {
if (rnk[a]<rnk[b]) {
swap(a, b);
}
parent[b]=a;
if (rnk[a]==rnk[b])
rnk[a]++;
}
}
int main() {
int n,m,i,cer,x,y;
fin>>n>>m;
parent.resize(n+1);
rnk.resize(n+1, 0);
for (i=1; i<=n; i++) {
parent[i] = i;
}
for (i=0; i<m; i++) {
fin>>cer>>x>>y;
if (cer==1) {
Union(x, y);
} else if (cer==2) {
if (Find(x)==Find(y)) {
fout<<"DA"<<endl;
} else {
fout<<"NU"<<endl;
}
}
}
return 0;
}