Pagini recente » Cod sursa (job #62984) | Cod sursa (job #2180917) | Cod sursa (job #2393850) | Cod sursa (job #969697) | Cod sursa (job #3154094)
#include <fstream>
#include <map>
#include <algorithm>
#include <vector>
int v[100001];
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
struct DSU
{
int N;
vector<int> parent, sizes;
void init(int n)
{
N = n;
parent.resize(n+1);
sizes.resize(n+1);
for(int i=1; i<=n; i++)
{
parent[i] = i;
sizes[i] = 1;
}
}
int findd(int u)
{
if(u == parent[u])
return u;
return parent[u] = findd(parent[u]);
}
void unite(int u, int v)
{
u = findd(u);
v = findd(v);
if(u == v)
return;
if(sizes[v] > sizes[u])
swap(u,v);
parent[v] = u;
sizes[u] += sizes[v];
}
};
int main()
{
DSU dsu;
int n, m,q,a,b;
cin >> n >> m;
for(int i=1; i<=n; i++)
{
v[i] = i;
}
dsu.init(n);
for(int i=1; i<=m; i++)
{
cin >> q >> a >> b;
if(q == 1)
{
dsu.unite(a, b);
}
else
{
if(dsu.findd(a) == dsu.findd(b))
cout << "DA" << '\n';
else
cout << "NU" << '\n';
}
}
return 0;
}