大致题意就是给出一棵树,求出叶子结点的最小权值,并输出该叶子节点的个数。
这是一道模板题,我近期做的几乎都是模板题。我现在认为 树与二叉树 是对 图 的一种严格约束,并且“二叉树,树,图”使用邻接表的存储结构比较多。
1 #include<iostream> 2 #include<vector> 3 #include<map> 4 using namespace std; 5 6 const int maxn = 100010; 7 vector<int> node[maxn]; 8 int n,k,child; 9 double p,r; 10 map<double,int> mp; 11 void DFS(int root, double price) { //树的先序遍历 12 if(node[root].size() == 0) { //叶子节点 13 mp[price]++; 14 return ; 15 } 16 for(int i = 0; i < node[root].size(); ++i) { 17 DFS(node[root][i],price*(1+r)); 18 } 19 } 20 21 int main() { 22 cin>>n>>p>>r; 23 r/=100; 24 for(int i = 0; i < n; ++i) { 25 cin>>k; 26 if(k != 0) { 27 for(int j = 0 ; j < k; ++j) { 28 cin>>child; 29 node[i].push_back(child); 30 } 31 } 32 } 33 DFS(0,p); 34 auto it = mp.begin(); 35 printf("%.4f %d",it->first,it->second); 36 return 0; 37 }
原文地址:https://www.cnblogs.com/keep23456/p/12400583.html
时间: 2024-10-06 05:12:51