zoukankan      html  css  js  c++  java
  • [PAT] A1090 Highest Price in Supply Chain

    题目大意

    给出供应链总人数、起始货源的价格、每次经销的涨幅;以及供应链中所有人的直接供应者的编号。求出最大价格和销售最大价格的销售者的人数。

    思路

    显然整个供应链可以看作一棵树。题目转化为给一棵树,在树根出货物的价格为p,然后每往下走一层,价格增加r%,求深度最大的结点的价格,以及这个价格的叶子结点个数。
    用结构体存储结点,每个结点用变长数组存储它的下家。DFS遍历求出每个结点的深度;再经过一次循环找到最深深度和最深深度的结点个数(也可以放在遍历时求出)。最后计算价格即可。

    AC代码

    #define _CRT_SECURE_NO_WARNINGS
    #include<cstdio>
    #include<iostream>
    #include<vector>
    using namespace std;
    #define MAX 100000
    struct node {
    	int level;
    	vector<int>child;
    };
    node G[MAX];
    void DFS(int v, int layer) {
    	G[v].level = layer;
    	for (int i = 0;i < G[v].child.size();i++)
    		DFS(G[v].child[i], layer + 1);
    }
    int main() {
    	int n, i, temp, s;
    	double p, r;
    	scanf("%d%lf%lf", &n, &p, &r);
    	for (i = 0;i < n;i++) {
    		scanf("%d", &temp);
    		if (temp != -1)G[temp].child.push_back(i);
    		else s = i;
    	}
    	DFS(s, 0);
    	int maxLevel = 0, maxNum = 0;
    	for (i = 0;i < n;i++) {
    		if (G[i].level > maxLevel) {
    			maxLevel = G[i].level;
    			maxNum = 1;
    		}
    		else if (G[i].level == maxLevel)maxNum++;
    	}
    	for (i = 0;i < maxLevel;i++)p *= 1.0 + r / 100.0;
    	printf("%.2lf %d", p, maxNum);
    	return 0;
    }
    
  • 相关阅读:
    关于httpd服务的安装、配置
    时间同步ntp服务的安装与配置(作为客户端的配置
    通过挂载系统光盘搭建本地yum仓库的方法
    linux系统的初化始配置(包括网络,主机名,关闭firewalld与selinux)
    Linux下GNOME桌面的安装
    Java面试题汇总
    无敌存储过程分页使用
    正则表达式
    函数
    杂货
  • 原文地址:https://www.cnblogs.com/yue36/p/13367313.html
Copyright © 2011-2022 走看看