标签:span info print bsp 遍历 system else com root
#include <bits/stdc++.h> #include <stdio.h> #include <stdlib.h> #include <queue> using namespace std; const int maxn = 100010; vector<int> child[maxn]; double p,r; int n,minDepth = 100,num = 0; void DFS(int index,int depth){ if(child[index].size() == 0){ if(depth < minDepth){ minDepth = depth; num = 1; }else if(depth == minDepth){ num++; } return; } for(int i =0;i<child[index].size();++i){ DFS(child[index][i],depth+1); } } int main(){ int father,root; scanf("%d%lf%lf",&n,&p,&r); r /= 100; for(int i=0;i<n;++i){ scanf("%d",&father); if(father != 0){ //child[father].push_back(i); for(int j = 0;j<father;++j){ int t; scanf("%d",&t); child[i].push_back(t); } } } DFS(0,0); printf("%.4f %d\n",p * pow(1+r,minDepth),num); system("pause"); return 0; }
改进后:
#include <bits/stdc++.h> #include <stdio.h> #include <stdlib.h> #include <queue> using namespace std; const int maxn = 100010; const double INF = 1e12; vector<int> child[maxn]; double p,r,ans = INF; int n,minDepth = 100,num = 0; void DFS(int index,int depth){ if(child[index].size() == 0){ double price = p * pow(1+r,depth); if(price < ans){ ans = price; num = 1; }else if(price == ans){ num++; } return; } for(int i =0;i<child[index].size();++i){ DFS(child[index][i],depth+1); } } int main(){ int father,root; scanf("%d%lf%lf",&n,&p,&r); r /= 100; for(int i=0;i<n;++i){ scanf("%d",&father); if(father != 0){ //child[father].push_back(i); for(int j = 0;j<father;++j){ int t; scanf("%d",&t); child[i].push_back(t); } } } DFS(0,0); printf("%.4f %d\n",ans,num); system("pause"); return 0; }
树的遍历——A1106.Lowest Price in Supply Chain(25) 求树的深度最小的叶子结点 与A1190类似
标签:span info print bsp 遍历 system else com root
原文地址:https://www.cnblogs.com/JasonPeng1/p/12236947.html