Pagini recente » Cod sursa (job #1658432) | Cod sursa (job #1152420) | Cod sursa (job #2174622) | Cod sursa (job #46982) | Cod sursa (job #1934860)
#include <fstream>
#define MAX 100005
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n, m;
int parent[MAX], rank[MAX];
inline void MakeSet(int x){
parent[x] = x;
rank[x] = 0;
}
int Union(int x, int y){
int xRoot = parent[x];
int yRoot = parent[y];
if(rank[x] > rank[y]) parent[y] = xRoot;
else if(rank[y] > rank[x]) parent[x] = yRoot;
else{
parent[y] = xRoot;
++rank[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";
}
}
}