PAT–1106 Lowest Price in Supply Chain
- 题目描述
- 代码
不知道自己有没有想的复杂了,看起来是一个多叉树,求根节点子树深度最小层的叶子结点的个数,用队列实现,并用一个levels数组记录每层的叶子结点,拿到了全分哦
//
// Created by 马然 on 2022/5/2.
//
#include<iostream>
#include<queue>
#include<vector>
#include<iomanip>
using namespace std;
struct node{
int child_number;//孩子的个数
vector<int> v;//存放孩子
int level = 0;//层数
};
int main(){
int N ;
int minlevel = 0;//子树深度最小层
int levels[100005] = {0};//存放每层的叶节点数
int flag = 0;//用来标识最小层的层数
double P , r;
cin>>N>>P>>r;
node no[100005];
for(int i = 0 ; i < N ; i++){//存入数组
int n;
vector<int> v;
cin>>n;
for(int j = 0 ; j < n ; j++){
int t;
cin>>t;
v.push_back(t);
}
no[i].child_number = n;
no[i].v = v;
}
queue<node> q;//构造队列,层序遍历
q.push(no[0]);
while(!q.empty()){
node temp = q.front();
q.pop();
if(temp.child_number != 0){//有孩子,孩子入队
int i = 0;
while(i < temp.child_number){
no[temp.v[i]].level = temp.level + 1;
q.push(no[temp.v[i]]);
i++;
}
}
else{//无孩子,levels[]++
if(!flag){//第一个叶节点
minlevel = temp.level;
flag = 1;
}
levels[temp.level]++;
}
}
int i = 0;
double re = P;
while(i < minlevel){
re = re + re * r / 100;
i++;
}
cout<<fixed<<setprecision(4)<<re<<" "<<levels[minlevel];
}
博客详细解析了PAT编程题1106——供应链最低价格问题。作者通过多叉树模型,利用队列进行层序遍历,寻找最底层的叶子节点,计算最小价格。代码中定义了节点结构体,使用vector存储子节点,并通过level数组记录每层的叶子节点数量。最终输出最低价格及对应叶子节点数。
1276

被折叠的 条评论
为什么被折叠?



