Pagini recente » Cod sursa (job #10863) | Cod sursa (job #1919573) | Cod sursa (job #3248418) | Cod sursa (job #3133241) | Cod sursa (job #2549198)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
vector <int> parent, deg;
int n, m;
int root(int node)
{
if(parent[node] == 0)
return node;
else
{
int uppernode = root(parent[node]);
parent[node] = uppernode;
return uppernode;
}
}
void unite(int x, int y)
{
int rx = root(x), ry = root(y);
if(deg[rx] < deg[ry])
parent[rx] = ry;
else
parent[ry] = rx;
if(deg[rx] == deg[ry])
++ deg[ry];
}
int main()
{
in >> n >> m;
parent = vector <int> (n + 1, 0);
deg = vector <int> (n + 1, 1);
for(int i = 1; i <= m; ++ i)
{
int x, y, op;
in >> op >> x >> y;
if(op == 2)
(root(x) == root(y))? out << "DA\n" : out << "NU\n";
else
unite(x, y);
}
return 0;
}