Pagini recente » Cod sursa (job #3312044) | Cod sursa (job #3321393) | Cod sursa (job #737916) | Cod sursa (job #737905) | Cod sursa (job #2807118)
#include <bits/stdc++.h>
struct repRang{
int rep;
int rang;
};
const int nmax = 100005;
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
class Graf{
public:
static int findRep(repRang* info, int x){
if(x == info[x].rep)
return x;
return (info[x].rep = findRep(info, info[x].rep));
}
static void reunion(repRang* info, int x, int y){
int repX = findRep(info, x);
int repY = findRep(info, y);
if(info[repX].rang > info[repY].rang)
info[repX].rep = repY;
else
if(info[repX].rang < info[repY].rang)
info[repY].rep = repX;
else
{
info[repX].rang++;
info[repY].rep = repX;
}
}
static void disjoint(istream& fin, ostream& fout){
repRang* info = new repRang[nmax];
int N, M;
fin >> N >> M;
for(int i = 1; i <= N; ++i)
info[i].rep = i;
for(int i = 1; i <= M; ++i){
int cod, x, y;
fin >> cod >> x >> y;
if(cod == 2)
if(findRep(info, x) == findRep(info, y))
fout << "DA\n";
else
fout << "NU\n";
else
reunion(info, x, y);
}
}
};
int main()
{
Graf::disjoint(fin, fout);
return 0;
}