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 }