PAT 1079

题目 : Total Sales of Supply Chain

分值 : 25
难度 : 简单题
思路 : 我用的层序遍历,一个sum+= 叶子权重*原价*pow(涨幅,层数)
坑点 : 因为 N最大为100001,我在存图的时候,用了二维数组,无情超时了,后来改用了vetor数组
       形式来记录,也即是节点 N 的邻居存在了 vector数组里面.

具体代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <math.h>
#include <vector>
using namespace std ;
vector<int> Map[100005] ;
vector <int>:: iterator iter ;
int level[100001];
int value[100001];
int main() {
int N ;
double P , r;
cin >> N >> P >> r ;
for(int i = 0 ; i< N ; i++)
{
int sum ;
cin >> sum ;
for(int j = 0 ; j < sum ; j ++)
{
int temp ;
cin >> temp ;
Map[i].push_back(temp) ;
}
if(sum == 0)
cin>> value[i] ;
}
double sum = 0 ;
int cur = 0 , count = 0 ;
int Q[100001] ;
Q[count ++] = 0 ;
while (cur < count )
{
int index = Q[cur] ;
bool flag = false ;
for(iter = Map[index].begin() ; iter !=Map[index].end() ;iter++)
{
//cout << *iter <<endl ;
flag = true ;
Q[count ++]=*iter ;
level[*iter ] = level [index] +1 ;
}

if(!flag)
{
sum += pow(1+r*0.01, level[index] )* P *value[ index ] ;
}
cur ++ ;
}
printf("%.1lf\n" ,sum );

}