跟前面一道题很像,也是深度优先搜索,不再赘述。
但是需要注意初始条件,也就是深搜前的目前最深层数和目前最深层数的人数这两个全局变量的初始条件,很重要,有两个用例考察的是这一点。要仔细考虑:
1、如果只有一个人,最高售价(最深层数)、最高售价的人数输出是否正确。
2、层数与售价的计算关系是否正确。
下面贴上AC代码
#include<stdio.h>
#include<vector>
#include<math.h>
using namespace std;
vector<int> children[100001];
int bestLayer;
int bestNum;
void DFS(int supplier, int layer)
{
for (int i = 0; i < children[supplier].size(); i++)
{
int child = children[supplier][i];
if (children[child].size() == 0)
{
if (layer == bestLayer)
{
bestNum++;
}
else if (layer > bestLayer)
{
bestLayer = layer;
bestNum = 1;
}
}
else
{
DFS(child, layer + 1);
}
}
}
int main()
{
bestLayer = 0;
bestNum = 1;
int N, root;
double P, r;
scanf("%d%lf%lf", &N, &P, &r);
r = r / 100.0 + 1.0;
for (int i = 0; i < N; i++)
{
int supplier;
scanf("%d", &supplier);
if (supplier == -1)
{
root = i;
}
else
{
children[supplier].push_back(i);
}
}
DFS(root, 1);
printf("%.2lf %d\n", P*pow(r, 1), bestNum);
return 0;
}