1106 Lowest Price in Supply Chain (25 分)静态实现树,dfs,计算树大最小高度或者直接在dfs中计算每次价格

1⃣️如果将一个double类型的数按照%d输出,会输出随机的大数字
2⃣️测试点错误是因为最开始min的值不够大,这道题默认了根节点是0

#include<iostream>
#include<vector>
using namespace std;
int N,isexist[100001]={
    
    0},start,num=0;
double p,r,min1=99999999;
struct node{
    
    
    vector<int> child;
}n[100001];
void dfs(int root,double price)
{
    
    
    if(root!=start)
        price=price*(1+r/100);
    if(price==min1&&n[root].child.size()==0)
        num++;
    if(price<min1&&n[root].child.size()==0)             //注意二者顺序不可颠倒,否则赋值结束后二者肯定相等,答案会多1
    {
    
    
        min1=price;
        num=1;
    }
    for(int i=0;i<n[root].child.size();i++)
        dfs(n[root].child[i],price);
}
int main()
{
    
    
    cin>>N>>p>>r;
    for(int i=0;i<N;i++)
    {
    
    
        int temp;
        cin>>temp;
        if(temp!=0)
        {
    
    
            for(int j=0;j<temp;j++)
            {
    
    
                int t;
                cin>>t;
                n[i].child.push_back(t);
                isexist[t]=1;
            }
        }
    }
    for(start=0;isexist[start];start++);
    dfs(start,p);
    printf("%.4lf %d",min1,num);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42835526/article/details/113705667
今日推荐