Precio más alto de la PTA en la cadena de suministro (25 分)

Es la mente humana la que libera la luz infinita, y también es la mente humana la que crea la oscuridad ilimitada. La luz y la oscuridad se entrelazan y luchan juntas. Este es el mundo por el que estamos nostálgicos y desamparados.

Una cadena de suministro es una red de minoristas (minoristas), distribuidores y proveedores (proveedores): todos los involucrados en el traslado de un producto de proveedor a cliente.

A partir de un proveedor raíz, todos en la cadena compran productos de su proveedor a un precio P y los venden o distribuyen a un precio r% más alto que P. Se supone que cada miembro de la cadena de suministro tiene exactamente un proveedor excepto el proveedor raíz, y no hay ciclo de suministro.

Ahora, dada una cadena de suministro, se supone que debe indicar el precio más alto que podemos esperar de algunos minoristas.

Especificación de entrada:

Cada archivo de entrada contiene un caso de prueba. Para cada caso, la primera línea contiene tres números positivos: N (≤10 5), el número total de miembros en la cadena de suministro (y por lo tanto están numerados de 0 a N − 1); P, el precio dado por el proveedor raíz; y r, la tasa porcentual de incremento de precio para cada distribuidor o minorista. Luego, la siguiente línea contiene N números, cada número S i es el índice del proveedor para el i-ésimo miembro. La raíz S para el proveedor raíz se define como -1. Todos los números de una línea están separados por un espacio.

Especificación de salida:

Para cada caso de prueba, imprima en una línea el precio más alto que podemos esperar de algunos minoristas, con una precisión de hasta 2 decimales, y el número de minoristas que venden al precio más alto. Debe haber un espacio entre los dos números. Se garantiza que el precio no superará los 10 10.

Entrada de muestra:

9 1.80 1.00
1 5 4 4 -1 4 5 3 6

Salida de muestra:

1.85 2
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#include<climits>//INT_MAX
//#include<bits/stdc++.h>
#define PP pair<ll,int>
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
#define PI 3.1415926
typedef long long ll;
using namespace std;
int const mod=1e9+7;
const int maxn=1e5+10;
vector<int>a[maxn];
vector<int>jg;
int n,mx;
double P,r;
void dfs(int v,int h)
{
    if(a[v].size()==0)
    {
        if(h>mx)
        {
            mx=h;
            jg.clear();
            jg.push_back(v);
        }
        else if(h==mx)
            jg.push_back(v);
        return;
    }
    for(int i=0;i<a[v].size();i++)
    {
        int u=a[v][i];
        dfs(u,h+1);
    }
}
int main()
{
    scanf("%d%lf%lf",&n,&P,&r);
    r/=100;
    int root;
    for(int i=0;i<n;i++)
    {
        int x;
        scanf("%d",&x);
        if(x!=-1)
            a[x].push_back(i);
        else
            root=i;
    }
    dfs(root,1);
    printf("%.2f %d",P*pow(1+r,mx-1),jg.size());
    return 0;
}

 

Supongo que te gusta

Origin blog.csdn.net/weixin_44170305/article/details/108544751
Recomendado
Clasificación