Pagini recente » Cod sursa (job #1043962) | Cod sursa (job #442231) | Cod sursa (job #1912595) | Cod sursa (job #2096406) | Cod sursa (job #936901)
Cod sursa(job #936901)
#include <fstream>
#include <vector>
using namespace std;
vector<int> parent;
vector<int> rank;
int find(int i)
{
return (parent[i]? parent[i] = find(parent[i]) : i);
}
void merge(int i, int j)
{
int root1 = find(i), root2 = find(j);
if (rank[root1] < rank[root2]) parent[root1] = root2;
else if (rank[root1] > rank[root2]) parent[root2] = root1;
else {parent[root2] = root1; ++rank[root1];}
}
int main() {
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m;
fin >> n >> m;
parent.resize(n+1);
rank.resize(n+1);
int q, a, b;
for (; m > 0; --m) {
fin >> q >> a >> b;
if (q == 1) merge(a,b);
else if (find(a) == find(b)) fout << "DA\n";
else fout << "NU\n";
}
return 0;
}