【题意】
找到一个供销网络中的最高零售价和相应的零售商人数
【思路】
其实就是求从根节点到叶节点的最大深度,记录下每个供应商供给的人的编号,DFS即可
#include <iostream>
#include <vector>
#include <cmath>
#include <cstdio>
using namespace std;
int maxDepth = 0,cnt = 0;
vector<vector<int>> net;
void dfs(int index, int depth){
depth++;
if(net[index].size()==0){
if(depth>maxDepth){
maxDepth = depth;
cnt = 1;
}
else if(depth==maxDepth){
cnt++;
}
}
else{
for(int i=0; i<net[index].size(); i++){
dfs(net[index][i],depth);
}
}
}
int main(int argc, char const *argv[])
{
int n,rootId;
double p,r;
cin >> n >> p >> r;
net.resize(n);
for(int i=0; i<n; i++){
int num;
cin >> num;
if(num==-1){
rootId = i;
continue;
}
net[num].push_back(i);
}
dfs(rootId,-1);
printf("%.2lf %d", p*pow(1+0.01*r,maxDepth), cnt);
system("pause");
return 0;
}