Need help in hackerearth mock interview problem

image
image
image
image

Can someone tell why mine is coming wrong answer and what is mistake in logic

#include <bits/stdc++.h>
using namespace std;
#define int long long
vector<pair<int, int>> g[200001];
vector<pair<int, int>>minP(200001);
int n, LN;
int timer;
vector<int> level;
vector<vector<int>> dp;

void dfs1(int u, int p) {
	level[u] = level[p] + 1;
	dp[u][0] = p;
	for (int i = 1; i < LN; ++i)
		dp[u][i] = dp[dp[u][i - 1]][i - 1];
	for (int i = 0; i < g[u].size(); ++i) {
		auto v = g[u][i];
		if (v.first == p) continue;
		dfs1(v.first, u);
	}
}

int lca(int u, int v) {
	if (level[u] < level[v])
		swap(u, v);
	int diff = level[u] - level[v];
	for (int i = 0; i < LN; ++i) {
		if ((1 << i) & diff)
			u = dp[u][i];
	}
	if (u == v)
		return u;
	for (int i = LN - 1; i >= 0; --i) {
		if (dp[u][i] != dp[v][i]) {
			u = dp[u][i];
			v = dp[v][i];
		}
	}
	return dp[u][0];
}

pair<int, int> towfive(int w)
{
	int notwo = 0;
	int nofive = 0;
	while (w % 2 == 0)
	{
		notwo++;
		w /= 2;
	}
	while (w % 5 == 0)
	{
		nofive++;
		w /= 5;
	}
	return {notwo, nofive};
}
void dfs(int i, int p, int no2, int no5)
{
	minP[i].first = no2;
	minP[i].second = no5;
	//cout << i << " " << no2 << " " << no5 << "\n";
	for (auto it : g[i])
	{
		if (it.first == p)
		{
			continue;
		}
		int w1 = it.second;
		int node = it.first;
		pair<int, int> x = towfive(w1);
		dfs(node, i, x.first + no2, x.second + no5);
	}
}
int32_t main()
{
#ifndef ONLINE_JUDGE
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
#endif
	int n, q;
	cin >> n >> q;
	for (int i = 1; i < n; i++)
	{
		int x, y, w;
		cin >> x >> y >> w;
		g[x].push_back({y, w});
		g[y].push_back({x, w});
	}
	level.resize(n + 1);
	timer = 0;
	LN = ceil(log2(n + 1));
	dp.assign(n + 1, vector<int>(LN + 1));
	dfs(1, 0, 0, 0);
	dfs1(1, 0);
	cout << "\n";
	for (int i = 0; i < q; i++)
	{
		int x, y;
		cin >> x >> y;
		int ans1 = minP[x].first + minP[y].first - 2 * minP[lca(x, y)].first;
		int ans2 = minP[x].second + minP[y].second - 2 * minP[lca(x, y)].second;
		int ans = min(ans1, ans2);
		cout << ans << "\n";
	}
	return 0;
}

``
Comments (1)