Pagini recente » Rating Condrea Simona Raluca (condrysimo) | Profil motty | Borderou de evaluare (job #1336701) | Istoria paginii problema/pesti | Cod sursa (job #3286918)
#include <bits/stdc++.h>
using namespace std;
vector<int>parent;
vector<int>rnk;
int find_set(int a)
{
if(parent[a] != a)
parent[a] = find_set(parent[a]);
return parent[a];
}
void union_set(int a, int b)
{
a = find_set(a);
b = find_set(b);
if(a != b)
{
if(rnk[a] < rnk[b])
swap(a,b);
parent[b] = a;
if(rnk[a] == rnk[b])
rnk[a]++;
}
}
int n, m;
int main()
{
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int x, i, j, q;
fin >>n>>m;
parent.resize(n+1);
rnk.resize(n+1);
for(i = 1; i <= n; i++)
{
parent[i] = i;
rnk[i] = 0;
}
for(x = 0; x < m; x++)
{
fin >>q>>i>>j;
if(q == 1)
{
union_set(i,j);
}
else
{
if(find_set(i) != find_set(j))
fout <<"NU"<<"\n";
else fout <<"DA"<<"\n";
}
}
return 0;
}