PAT1106 Lowest Price in Supply Chain(树、邻接表、DFS)

博客讲述了PAT1106题目的解题思路,通过将问题转化为树的深度优先搜索,寻找最小深度的叶子节点来找到最低价格。代码实现中使用了DFS遍历树结构,并更新最低价格和对应的零售商数量。运行截图展示了程序输出。文章强调了理解题目要求的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题

在这里插入图片描述

题目大意及思路

题目中给了零售商、经销商和供应商之间的信息,需要我们找出能够达到的最便宜的物价以及能买到这个价的零售商的个数。
虽然题中说的是供应商、经销商、零售商,其实对应树中的根节点、中间节点和叶子节点,要找到最低价格其实就是找到最小深度的叶子结点。
找最低价格的过程就是DFS遍历整棵树的过程,并且供应商的个数在叶子结点的时候进行更新。

代码

#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
int maxn,number=0;
const int maxnumber=100010;
vector<int> Adj[maxnumber];
void DFS(int index,int d){
	if(Adj[index].size()==0){
		if(d<maxn){
			maxn=d;
			number=1;
		} 
		else if(d==maxn) number++;
		return;
	}
	for(int i=0;i<Adj[index].size();i++) DFS(Adj[index][i],d+1);
}
int main(){
	int n;
	double p,r;
	cin>>n>>p>>r;
	maxn=n;
	for(int i=0;i<n;i++){
		int k;
		cin>>k;
		for(int j=0;j<k;j++){
			int conj;
			cin>>conj;
			Adj[i].push_back(conj);
		} 
	}
	DFS(0,0);
	double ans=p*pow(1+0.01*r,maxn);
	printf("%.4lf %d",ans,number);
	return 0;
}

运行截图

在这里插入图片描述

收获

一定要看清楚题目要求!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值