Pagini recente » Cod sursa (job #1144314) | Cod sursa (job #1094737) | Cod sursa (job #2724850) | Cod sursa (job #3224731) | Cod sursa (job #2937981)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int Find(int x, vector<int>& parent)
{
if(x == parent[x])
return x;
else return parent[x] = Find(parent[x], parent);
}
void Union(int x, int y, vector<int>& parent, vector<int>& rank)
{
int rootx = Find(x, parent);
int rooty = Find(y, parent);
if(rank[rootx] > rank[rooty])
parent[rooty] = rootx;
else if(rank[rooty] > rank[rootx])
parent[rootx] = rooty;
else
{
parent[rootx] = rooty;
rank[rooty]++;
}
}
int main()
{
int n, m;
vector<int> parent(n+1);
vector<int> rank(n+1);
fin >> n >> m;
for(int i = 1; i <= n; i++)
{
parent[i] = i;
rank[i] = 1;
}
int cod, x, y;
for(int i = 1; i <= m; i++)
{
fin >> cod >> x >> y;
if(cod == 1)
Union(x, y, parent, rank);
else
{
if(Find(x, parent) != Find(y, parent))
fout << "NU\n";
else fout << "DA\n";
}
}
return 0;
}