Pagini recente » Cod sursa (job #2404006) | Cod sursa (job #1804346) | Cod sursa (job #2626871) | Cod sursa (job #3255419) | Cod sursa (job #2648298)
#include <iostream>
#include <fstream>
#include <vector>
#define NMax 100001
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n, father[NMax],rank_[NMax];
int find2(int a){
if (father[a] == a)
return a;
return find2(father[a]);
}
void unionOf(int a, int b){
if (rank_[find2(a)] < rank_[find2(b)])
father[find2(a)] = find2(b);
else
father[find2(b)] = find2(a);
if (rank_[find2(a)] == rank_[find2(b)])
rank_[find2(a)]++;
}
void findOf(int a, int b){
if (find2(a) == find2(b))
g <<"DA\n";
else
g << "NU\n";
}
void read(){
int m;
f >> n >> m;
for (int i=1; i<=n; i++){
father[i] = i;
rank_[i] = 1;
}
int a,b,c;
for (int i=1; i<=m; i++){
f >> a >> b >> c;
if (a == 1)
unionOf(b,c);
else
findOf(b,c);
}
}
int main()
{
read();
return 0;
}