Pagini recente » Cod sursa (job #1155096) | Cod sursa (job #2393939) | Cod sursa (job #299388) | Cod sursa (job #2777781) | Cod sursa (job #1934865)
#include <fstream>
#define MAX 100005
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n, m;
int parent[MAX], rang[MAX];
inline void MakeSet(int x){
parent[x] = x;
rang[x] = 0;
}
int Union(int x, int y){
int xRoot = parent[x];
int yRoot = parent[y];
if(rang[x] > rang[y]) parent[y] = xRoot;
else if(rang[y] > rang[x]) parent[x] = yRoot;
else{
parent[y] = xRoot;
++rang[x];
}
}
int Find(int x){
if(parent[x] != x)
parent[x] = Find(parent[x]);
return parent[x];
}
int main(){
f >> n >> m;
for(int i = 1; i <= n; ++i) MakeSet(i);
while(m){
--m;
int operation;
int x, y;
f >> operation;
f >> x >> y;
if(operation == 1){
Union(x, y);
}
else{
if(parent[x] == parent[y]) g << "DA\n";
else g << "NU\n";
}
}
}