Pagini recente » Cod sursa (job #3320873) | Cod sursa (job #3319710) | Monitorul de evaluare | Cod sursa (job #524243) | Cod sursa (job #3318196)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
const int dim= 1e5+ 5;
int n, m;
//vector <vector<int>> v;
int parinte[dim], mari[dim];
int find(int x)
{
if(x== parinte[x])
return x;
return find(parinte[x]);
}
void unite(int x, int y)
{
int p1= find(x);
int p2= find(y);
if(mari[p1] < mari[p2])
swap(p1, p2);
parinte[p2]= p1;
mari[p1]+= mari[p2];
}
void citeste()
{
int ce, x, y, i;
cin >> n>> m;
//v.resize(n+ 1);
for(i= 1;i <= n;i++)
{
parinte[i]= i;
mari[i]= 1;
}
for(i= 1;i <= m;i++)
{
cin >> ce>> x>> y;
if(ce== 1)
unite(x, y);
else
{
//for(int j= 1;j <= n;j++)
// cout << parinte[j]<< " "; cout << endl;
int p1= find(x);
int p2= find(y);
if(p1== p2)
cout <<"DA"<< '\n';
else
cout <<"NU"<< '\n';
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
citeste();
return 0;
}