欢迎访问我的pat甲级题解目录哦https://blog.csdn.net/richenyunqi/article/details/84981078
这道题与pat甲级1079. Total Sales of Supply Chain (25)十分类似,也是使用类似的图的遍历的方法,由于给定的图是无环连通图,可以直接看成一棵树,用深度优先遍历或广度优先遍历求出每一个结点处的单价,然后找出单价最高的并计算出相等的最高价有几个就可以了,当然这个步骤可以直接在遍历过程中得到。
给定的R是百分数的数字部分,也就是说如果R=1.00,每一对供应商与经销商之间的价格增长率应该为R=1.00/100
#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
#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