pat甲级1090. Highest Price in Supply Chain (25)

欢迎访问我的pat甲级题解目录哦https://blog.csdn.net/richenyunqi/article/details/84981078

题目描述

pat甲级1090. Highest Price in Supply Chain (25)_第1张图片

算法设计

这道题与pat甲级1079. Total Sales of Supply Chain (25)十分类似,也是使用类似的图的遍历的方法,由于给定的图是无环连通图,可以直接看成一棵树,用深度优先遍历或广度优先遍历求出每一个结点处的单价,然后找出单价最高的并计算出相等的最高价有几个就可以了,当然这个步骤可以直接在遍历过程中得到。

注意点

给定的R是百分数的数字部分,也就是说如果R=1.00,每一对供应商与经销商之间的价格增长率应该为R=1.00/100

深度优先遍历的c++代码

#include
using namespace std;
int N,root,maxNum=0;
double P,R,S[100005],maxPrice=0.0;
vectorgraph[100005];
void DFS(int v){//深度优先遍历
    if(S[v]>maxPrice){//当前单价比最高单价高
        maxPrice=S[v];//更新最高单价
        maxNum=1;//更新最高单价的数量为1
    }else if(S[v]==maxPrice)//当前单价与最高单价相等
        ++maxNum;//最高单价数量递增1
    for(int i:graph[v]){//遍历当前结点能到达的结点
        S[i]=S[v]*(1+R/100);//更新单价
        DFS(i);//递归遍历
    }
}
int main(){
    scanf("%d%lf%lf",&N,&P,&R);
    for(int i=0;i

广度优先遍历的c++代码

#include
using namespace std;
int N,root,maxNum=0;
double P,R,S[100005],maxPrice=0.0;
vectorgraph[100005];
void BFS(){//广度优先遍历
    queueq;
    q.push(root);
    while(!q.empty()){
        int v=q.front();
        q.pop();
        if(S[v]>maxPrice){//当前单价比最高单价高
            maxPrice=S[v];//更新最高单价
            maxNum=1;//更新最高单价的数量为1
        }else if(S[v]==maxPrice)//当前单价与最高单价相等
            ++maxNum;//最高单价数量递增1
        for(int i:graph[v]){
            q.push(i);
            S[i]=S[v]*(1+R/100);//更新单价
        }
    }
}
int main(){
    scanf("%d%lf%lf",&N,&P,&R);
    for(int i=0;i

 

你可能感兴趣的:(pat甲级)