PAT A1106 Lowest Price in Supply Chain
思路:根据输入建立vector为结构的树,再通过DFS求得最小高度,同时记录最小高度结点的数量,即可解决
#include<cstdio>
#include<vector>
#include<cmath>
using namespace std;
const int maxn = 100005;
vector<int> children[maxn];
double p, r;
int n, minDepth = maxn, cnt;
void DFS(int idx, int depth) {
int child_num = children[idx].size();
if(child_num == 0) {
if(depth < minDepth) {
minDepth = depth;
cnt = 1;
}
else if(depth == minDepth) cnt++;
return;
}
for(int i = 0; i < child_num; i++)
DFS(children[idx][i], depth + 1);
}
int main() {
scanf("%d %lf %lf", &n, &p, &r);
r /= 100;
int num, child;
for(int i = 0; i < n; i++) {
scanf("%d", &num);
for(int j = 0; j < num; j++) {
scanf("%d", &child);
children[i].push_back(child);
}
}
DFS(0, 0);
printf("%.4f %d", p * pow(1 + r, minDepth), cnt);
return 0;
}