Pagini recente » Cod sursa (job #2170809) | Cod sursa (job #880675) | Cod sursa (job #1645909) | Cod sursa (job #205144) | Cod sursa (job #3258754)
#include <fstream>
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
const int NMAX = 2e5;
struct DSU
{
int rep[NMAX];
int size[NMAX];
DSU(int n)
{
for(int i = 1 ; i <= n ; i++)
{
rep[i] = i;
size[i] = 1;
}
}
int get_rep(int x)
{
if(x == rep[x])
return x;
else return get_rep(rep[x]);
}
bool check(int a , int b)
{
if(get_rep(a) == get_rep(b))
return true;
else return false;
}
void join(int a , int b)
{
int ra = get_rep(a);
int rb = get_rep(b);
if(size[ra] > size[rb])
{
size[ra] += size[rb];
rep[rb] = ra;
}
else
{
size[rb] += size[ra];
rep[ra] = rb;
}
}
};
int n , m;
int main(int argc , char **argv)
{
cin.tie(NULL);
std::ios_base::sync_with_stdio(0);
cin >> n >> m;
DSU dsu(n);
int a , b , c;
for(int i = 1 ; i <= m ; i++)
{
cin >> a >> b >> c;
if(a == 1)
dsu.join(b , c);
else if(a == 2)
{
if(dsu.check(b , c))
cout << "DA" << "\n";
else cout << "NU" << "\n";
}
}
return 0;
}