AcWing 1565. 供应链总销售额
原题链接
简单
作者:
leo123456
,
2020-08-24 10:27:23
,
所有人可见
,
阅读 840
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;
const int N=100010;
int n;
double p,r;
vector<int> v[N];
int c[N];//叶子结点销售量
double sum;
void dfs(int u,int depth)
{
bool is_leaf=true;
for(int i=0;i<v[u].size();i++)
if(v[u][i])
{
is_leaf=false;
break;
}
if(is_leaf)
{
sum+=c[u]*p*pow(1+r,depth);
}
else
{
for(int i=0;i<v[u].size();i++)
if(v[u][i]) dfs(v[u][i],depth+1);
}
}
int main()
{
cin>>n>>p>>r;
r/=100;
for(int i=0;i<n;i++)
{
int k;
cin>>k;
for(int j=0;j<k;j++)
{
int son;
cin>>son;
v[i].push_back(son);
}
if(k==0)
{
int cc;
cin>>cc;
c[i]=cc;
}
}
dfs(0,0);
printf("%.1lf",sum);
return 0;
}
dfs里面直接判断v[u].size()是否等于0来判断是否是叶子节点可以吗
可以的