Pagini recente » Cod sursa (job #965268) | Cod sursa (job #1042561) | Cod sursa (job #2473140) | Cod sursa (job #3289619) | Cod sursa (job #1735114)
#include <iostream>
#include <fstream>
#include <vector>
#define nMax 100005
using namespace std;
ofstream fout("disjoint.out");
int n, m;
typedef struct {
int rad, hMax;
} nod;
nod node[nMax];
vector <int> v[nMax];
void dfs(int x, int y){
for(int i = 0; i < v[x].size(); ++i){
node[v[x][i]].rad = y;
dfs(v[x][i], y);
}
}
void solve(int x, int y)
{
if(node[x].hMax < node[y].hMax)
swap(x, y);
v[x].push_back(y);
node[x].hMax = max(node[x].hMax, node[y].hMax + 1);
node[y].rad = x;
dfs(y, x);
}
void write(int x, int y)
{
if(node[x].rad == node[y].rad)
fout << "DA\n";
else
fout << "NU\n";
}
void read()
{ int x, y, tip;
ifstream fin("disjoint.in");
fin >> n >> m;
for(int i = 1; i <= n; ++i)
node[i].hMax = 0, node[i].rad = i;
for(int i = 1; i <= m; ++i){
fin >> tip >> x >> y;
if(tip == 1) solve(node[x].rad, node[y].rad);
else write(x, y);
}
}
int main()
{
read();
return 0;
}