一、思路
DFS遍历,到达底层进行价格分析。
注意根供应商直接给出价格,不以倍率r涨价。
二、代码
#include <cstdio>
#include <vector>
using namespace std;
vector<int> tree[100000];
void dfs( int v, double price, double r, double &Min, int &cnt )
{
if( v )
price *= r;
if( !tree[v].size() && price < Min )
{
cnt = 1;
Min = price;
}
else if( !tree[v].size() && price == Min )
++cnt;
for( int i = 0; i < tree[v].size(); ++i )
dfs(tree[v][i], price, r, Min, cnt);
}
int main()
{
int N, cnt = 0;
double P, r, Min = 0x7FF0000000000000;
scanf("%d %lf %lf", &N, &P, &r);
r = r / 100 + 1;
for( int i = 0, K; i < N; ++i )
{
scanf("%d", &K);
tree[i].resize(K);
for( int j = 0; j < K; ++j )
scanf("%d", &tree[i][j]);
}
dfs( 0, P, r, Min, cnt );
printf("%.4f %d", Min, cnt);
}