Pagini recente » Cod sursa (job #541057) | Cod sursa (job #2104775) | Cod sursa (job #1465441) | Cod sursa (job #276857) | Cod sursa (job #3247524)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n;
int m;
int x, y, c;
struct DSU{
int N;
vector<int> parent, size1;
void init(int n)
{
N=n;
parent.resize(N+1);
size1.resize(N+1, 1);
for (int i=1; i<=n; ++i)
{
parent[i]=i;
}
}
int find1(int u)
{
if (parent[u]==u)
{
return u;
}
return parent[u]=find1(parent[u]);
}
void unite(int u, int v)
{
u=find1(u);
v=find1(v);
if (u==v)
{
return;
}
if (size1[v]>size1[u])
{
swap(v, u);
}
parent[v]=u;
size1[u]+=size1[v];
}
};
int main()
{
DSU dsu;
//cin>>n>>m;
fin>>n>>m;
dsu.init(n);
for (int i=1; i<=m; ++i)
{
//cin>>c;
fin>>c;
if(c==1)
{
//cin>>x>>y;
fin>>x>>y;
dsu.unite(x, y);
}
else if (c==2)
{
//cin>>x>>y;
fin>>x>>y;
if (dsu.find1(x)==dsu.find1(y))
{
//cout<<"DA"<<"\n";
fout<<"DA"<<"\n";
}
else
{
//cout<<"NU"<<"\n";
fout<<"NU"<<"\n";
}
}
}
return 0;
}