BFS algorithm to find the shortest path from root to leaves and count the quatity of the paths.
#include <iostream>
#include <stdio.h>
#include<stdlib.h>
#include <math.h>
#include <algorithm>
#include <vector>
#include <map>
#include <string>
#include <unordered_map>
#include <queue>
using namespace std;
const int MAXN = 110000;
unordered_map<int, vector<int>> chain;
int dis[MAXN];
int N;
double P, r;
int main() {
cin >> N >> P >> r;
int k,id;
for (int i = 0; i < N; i++)
{
cin >> k;
for (int j = 0; j < k; j++)
{
cin >> id;
chain[i].push_back(id);
}
}
int min = MAXN;
int cnt = 0;
int tmp;
queue<int> Q;
Q.push(0);
dis[0] = 0;
while (!Q.empty())
{
tmp = Q.front();
Q.pop();
if (!chain.count(tmp))
{
if (dis[tmp] < min) {
min = dis[tmp];
cnt = 1;
}
else if (dis[tmp] == min)++cnt;
}
else {
for (auto &p : chain[tmp])
{
Q.push(p);
dis[p] = dis[tmp] + 1;
}
}
}
double lowestPrice = P * pow(1 + r / 100, min);
printf("%.4f %d", lowestPrice, cnt);
return 0;
}