Pagini recente » Cod sursa (job #3138341) | Cod sursa (job #922907) | Cod sursa (job #1286001) | Cod sursa (job #1372665) | Cod sursa (job #3247534)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n,m,cod,x,y;
struct DSU{
vector<int> parent,sizes;
void init(int N)
{
parent.resize(n+1);
sizes.resize(n+1,1);
for(int i=1;i<=n;i++)
parent[i]=i;
}
int Find(int u)
{
if(u==parent[u])
return u;
return Find(parent[u]);
}
void unite(int u,int v)
{
u=Find(u);
v=Find(v);
if(u==v)
return;
if(sizes[v]>sizes[u])
swap(u,v);
parent[v]=u;
sizes[u]+=sizes[v];
}
};
int main()
{
DSU dsu;
fin >> n >> m;
dsu.init(n);
for(int i=1;i<=m;i++)
{
fin >> cod >> x >> y;
if(cod==1)
{
dsu.unite(x,y);
}
else
{
if(dsu.Find(x)==dsu.Find(y))
fout << "DA" << '\n';
else
fout << "NU" << '\n';
}
}
return 0;
}