Pagini recente » Cod sursa (job #1929785) | Monitorul de evaluare | Cod sursa (job #1530671) | Cod sursa (job #1315579) | Cod sursa (job #3331342)
#include <fstream>
#include <vector>
using namespace std;
ifstream be("disjoint.in");
ofstream ki("disjoint.out");
int find(int x, vector<int> &parent)
{
if(parent[x] != x)
{
parent[x] = find(parent[x], parent);
}
return parent[x];
}
void merge(int x, int y, vector<int> &parent, vector<int> &rank)
{
x = find(x, parent);
y = find(y, parent);
if(x == y) return;
if(rank[x] < rank[y]) swap(x, y);
parent[y] = x;
if(rank[x] == rank[y]) rank[x]++;
}
int main()
{
int n, m;
be >> n >> m;
vector<int> parent(n + 1);
vector<int> rank(n + 1);
for(int i = 1; i <= n; i++)
{
parent[i] = i;
}
for(int i = 0; i < m; i++)
{
int t, x, y;
be >> t >> x >> y;
if(t == 1)
{
merge(x, y, parent, rank);
}else
{
if(find(x, parent) == find(y, parent)) ki << "DA" << "\n";
else ki << "NU" << "\n";
}
}
return 0;
}