Pagini recente » Cod sursa (job #647933) | Cod sursa (job #1512845) | Cod sursa (job #1925674) | Cod sursa (job #2461568) | Cod sursa (job #2824226)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
struct DSU
{
vector<int> parent;
vector<int> sizes;
void init(int n)
{
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 find(int a)
{
if(parent[a]==a)
{
return a;
}
return find(parent[a]);
}
void unite(int a,int b)
{
a=find(a);
b=find(b);
if(a==b)
{
return;
}
if(sizes[a]<sizes[b])
{
swap(a,b);
}
parent[b]=a;
sizes[a]+=sizes[b];
}
};
int main()
{
int n,m,c,a,b;
fin>>n>>m;
DSU dsu;
dsu.init(n);
for(int i=1;i<=m;i++)
{
fin>>c>>a>>b;
if(c==1)
{
dsu.unite(a,b);
}
else
{
if(dsu.find(a)==dsu.find(b))
{
fout<<"DA";
}
else
{
fout<<"NU";
}
}
fout<<"\n";
}
return 0;
}