1090 Highest Price in Supply Chain

大致题意就是给出一棵树,求出叶子结点的最大权值,并输出该叶子节点的个数。

 令人疑惑的点:

我这里定义二维数组是vector<int> child[maxn],如果换成vector<int> child(maxn),就会无法push_back数据。。。奇了怪了。

1052 卖个萌 这题也用到了固定一边的二维数组。

 1 #include<iostream>
 2 #include<vector>
 3 #include<map>
 4 using namespace std;
 5 
 6 const int maxn = 100010;
 7 int n,root;
 8 vector<int> child[maxn];
 9 double p,r;
10 map<double,int> mp; //叶子权值与出现次数的映射
11 
12 void DFS(int root,double price) {
13     if(child[root].size() == 0) { //叶子节点 ---递归边界
14         mp[price]++;
15         return ;
16     }
17     for(int i = 0; i < child[root].size(); ++i) {
18         DFS(child[root][i],price*(1+r));
19     }
20 }
21 
22 int main() {
23     cin>>n>>p>>r;
24     r/=100;
25     int father;
26     for(int i = 0; i < n; ++i) { //初始化一棵树
27         cin>>father;
28         if(father == -1) root = i;
29         else child[father].push_back(i);
30     }
31     DFS(root,p);
32     auto it = mp.rbegin();
33     printf("%.2f %d",it->first,it->second);
34     return 0;
35 }

 

posted @ 2020-03-02 17:38  tangq123  阅读(131)  评论(0编辑  收藏  举报