PAT:1079. Total Sales of Supply Chain (25) AC

#include<stdio.h>
#include<math.h>
#include<vector>
using namespace std;
const int MAX=100010;

int DEPest=0;
int root=-1,N;
double P,r,sum=0;

vector<int> child[MAX];        //child[父亲][孩子]  二维数组表示树形结构

double price[MAX];          //记录叶子节点的权值

void DFS(int root,int depth)
{
  if(child[root].size()==0)    //叶子节点开始判断深度
  {
    double p=pow(1+r,1.0*depth)*P;    //【skill】转化为double型,乘以1.0
    /*for(int i=0 ; i<depth ; ++i)
      p*=(1+r);
      */
    sum+=p*price[root];      //总价加上数量乘以单价
    return;
  }
  for(int i=0 ; i<child[root].size() ; ++i)
    DFS(child[root][i],depth+1);
}
int main()
{

  scanf("%d%lf%lf",&N,&P,&r);
  r/=100;              //换算成百分数
  for(int i=0 ; i<N ; ++i)
  {
    int father,tmp;
    scanf("%d",&father);
    if(father!=0)
    {
      for(int j=0 ; j<father ; ++j)
      {
        scanf("%d",&tmp);
        child[i].push_back(tmp);
      }
    }
    else
    {
      scanf("%lf",&price[i]);        //叶子节点权值
    }
  }
  DFS(0,0);
  printf("%.1f",sum);
  return 0;
}
posted on 2015-03-08 14:37  Evence  阅读(108)  评论(0编辑  收藏  举报