Pagini recente » Cod sursa (job #919497) | Cod sursa (job #823251) | Cod sursa (job #3267125) | Cod sursa (job #2218209) | Cod sursa (job #2649978)
#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){
int aa = find2(a);
int bb = find2(b);
if (rank_[aa] < rank_[bb])
father[aa] = bb;
else
father[bb] = aa;
if (rank_[aa] == rank_[bb])
rank_[aa]++;
}
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;
}