Solution:
题目大意:
给出一棵树,序号为0~n-1,根结点恒为0。根结点的价格为p,每往下一个结点,价格都会以百分之r的利率提升,统计最小价格子结点的个数并输出这个最小价格,保留4位小数。
代码如下:
//树+dfs
#include<iostream>
#include<vector>
#include<math.h>
#include<stdio.h>
#define INF 0x3f3f3f3f
using namespace std;
struct tree{
int num;
vector<int> child;
};
int n;
double p,r;
vector<tree> t;
double minl=INF;
double ans=0.0;
int cnt=0;//计数
void dfs(int index,int depth){
if(t[index].num==0){
ans=p*pow(r+1,depth);
if(ans<minl){
cnt=1;
minl=ans;
}else if(ans==minl){
cnt++;
}
return;
}
for(int i=0;i<t[index].num;i++){
dfs(t[index].child[i],depth+1);
}
return;
}
int main(){
cin>>n>>p>>r;
r/=100;
t.resize(n);
int num,id;
for(int i=0;i<n;i++){
cin>>num;
t[i].num=num;
for(int j=0;j<num;j++){
cin>>id;
t[i].child.push_back(id);
}
}
dfs(0,0);
printf("%.4f %d",minl,cnt);
return 0;
}