1090 Highest Price in Supply Chain (25分)
题目大意:给定每个经销商的供应商,要求找到售出价格最高的经销商有几个,并输出最高价格。
其实就是DFS遍历,找到深度最大的结点。
在这里的邻接表只存放该结点作为供应商,从该供应商拿货的经销商的结点号。有点像树,只存放孩子结点。
相似的题目:1106 Lowest Price in Supply Chain (25分)
#include<iostream> //输入输出流头文件
#include<vector> //变长数组容器
using namespace std; //标准命名空间
int n=0,a,an=1,root,maxlevel=0;
double price,r;
vector<vector<int>> v;//邻接表
void dfs(int root,int level);
int main(){ //主函数
cin>>n>>price>>r;
v.resize(n);
for(int i=0;i<n;i++){
cin>>a;
if(a<0) root=i;
else v[a].push_back(i);
}
dfs(root,1);
for(int i=1;i<maxlevel;i++) price=price*r*0.01+price;
printf("%.2f %d\n",price,an);
return 0; //返回0,如果不返回0,PAT会报错
}
void dfs(int root,int level){
if(level>maxlevel){
maxlevel=level;
an=1;
}
else if(level==maxlevel) an++;
if(v[root].size()==0) return;
for(int i=0;i<v[root].size();i++)
dfs(v[root][i],level+1);
}