Pagini recente » Borderou de evaluare (job #430069) | Cod sursa (job #2631905) | Borderou de evaluare (job #2021531) | Cod sursa (job #2773457) | Cod sursa (job #2618578)
#include <bits/stdc++.h>
#define NMAX 100005
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n,m;
int parent[NMAX],Size[NMAX];
void make_set(int node)
{
parent[node]=node;
Size[node]=1;
}
int find_set(int node)
{
if(parent[node]==node)return node;
return parent[node]=find_set(parent[node]);
}
void union_sets(int a,int b)
{
a=find_set(a);
b=find_set(b);
if(a!=b)
{
if(Size[a]<Size[b])swap(a,b);
parent[b]=a;
Size[a]+=Size[b];
}
}
int main()
{
fin>>n>>m;
for(int i=1;i<=n;i++)
{
make_set(i);
}
for(int i=1;i<=m;i++)
{
int task,a,b;
fin>>task>>a>>b;
if(task==1)union_sets(a,b);
else
{
if(find_set(a)==find_set(b))fout<<"DA"<<'\n';
else fout<<"NU"<<'\n';
}
}
}