和A1079、A1094都是换汤不换药的题目,没什么好说的,DFS一遍找出最小值。
#include <cstdio>
#include <vector>
#include <map>
#include <cmath>
using namespace std;
map<double,int> m;
int n;
double unit, r;
double MIN = pow(10,10)+1;
struct Node{
vector<int> child;
}node[100010];
void DFS(int index, double p){
if(node[index].child.size()==0){
if(p <= MIN){
MIN = p;
m[p]++;
}
return;
}
for(int i=0; i<node[index].child.size(); i++){
DFS(node[index].child[i], p*r);
}
}
int main(){
scanf("%d %lf %lf", &n, &unit, &r);
r = r / 100 + 1;
for(int i=0; i<n; i++){
int num;
scanf("%d", &num);
for(int j=0; j<num; j++){
int index;
scanf("%d", &index);
node[i].child.push_back(index);
}
}
DFS(0, unit);
printf("%.4f %d", MIN, m[MIN]);
return 0;
}