Pagini recente » Rating Crisan Andrei Laurentiu (Oddie1234) | Cod sursa (job #878604) | Cod sursa (job #275407) | Cod sursa (job #1037363) | Cod sursa (job #2807467)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int par[100005], dim[100005];
int find_node(int x)
{
while(x!=par[x])
x=par[x];
return x;
}
void unite(int x,int y)
{
int find_x=find_node(x);
int find_y=find_node(y);
if(dim[find_x]>=dim[find_y])
{
par[find_y]=find_x;
dim[find_x]+=dim[find_y];
}
else
{
par[find_x]=find_y;
dim[find_y]+=dim[find_x];
}
}
void init(int n)
{
for(int i=1; i<=n; ++i)
{
par[i]=i;
dim[i]=1;
}
}
int main()
{
ios_base::sync_with_stdio(false);
fin.tie(NULL);
int n,m;
fin>>n>>m;
init(n);
for(int i=1; i<=m; i++)
{
int optiune, a, b;
fin>>optiune>>a>>b;
if(optiune == 1)
{
unite(a,b);
}
else if(optiune==2)
{
if(find_node(a) == find_node(b))
fout<<"DA";
else
fout<<"NU";
fout<<'\n';
}
}
return 0;
}