PAT A1090 Highest Price in Supply Chain [树的遍历]
发布时间:2020-12-16 10:48:04 所属栏目:百科 来源:网络整理
导读:题目描述 链接 给一棵树,在树根处货物的价格为p,然后每往下走一层,价格增加r%,求所有叶子结点的最高价格,以及这个价格的叶子结点个数 分析 关键在于dfs怎么设计来保存这个最大值,以及最大值的个数 别人的代码如下,比较巧。。。还用了个maxnum。。我怎
题目描述链接 分析
void dfs(int index,int depth) { if(v[index].size() == 0) { if(maxdepth == depth) maxnum++; if(maxdepth < depth) { maxdepth = depth; maxnum = 1; } return ; } for(int i = 0; i < v[index].size(); i++) dfs(v[index][i],depth + 1); } 我的代码就是保存所有值,排序,然后再遍历求重复值 #include<bits/stdc++.h> using namespace std; const int maxn = 1e5+10; vector<int> v[maxn]; int n,id,rt,cnt; double p,r; vector<int> ans; bool cmp(int a,int b){ return a > b; } void dfs(int root,int m){ if(v[root].size()==0){ ans.push_back(m); return; } for(int i=0;i<v[root].size();i++){ dfs(v[root][i],m+1); } } void solve(){ dfs(rt,0); sort(ans.begin(),ans.end(),cmp); for(int i=1;i<ans.size();i++){ if(ans[i] == ans[0]) cnt++; } double max_ans = pow(1+r/100,ans[0]) * p; printf("%.2f %dn",max_ans,cnt+1); } int main(){ scanf("%d%lf%lf",&n,&p,&r); for(int i=0;i<n;i++){ scanf("%d",&id); if(id != -1) v[id].push_back(i); else rt = i; } solve(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |