zoukankan      html  css  js  c++  java
  • 树的遍历——A1106.Lowest Price in Supply Chain(25) 求树的深度最小的叶子结点 与A1190类似

    #include <bits/stdc++.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <queue>
    using namespace std;
    const int maxn = 100010;
    vector<int> child[maxn];
    double p,r;
    int n,minDepth = 100,num = 0;
    void DFS(int index,int depth){
        if(child[index].size() == 0){
            if(depth < minDepth){
                minDepth = depth;
                num = 1;
            }else if(depth == minDepth){
                num++;
            }
            return;
        }
        for(int i =0;i<child[index].size();++i){
            DFS(child[index][i],depth+1);
        }
    }
    int main(){
        int father,root;
        scanf("%d%lf%lf",&n,&p,&r);
        r /= 100;
        for(int i=0;i<n;++i){
            scanf("%d",&father);
            if(father != 0){
                //child[father].push_back(i);
                for(int j = 0;j<father;++j){
                    int t;
                    scanf("%d",&t);
                    child[i].push_back(t);
                }
            }
        }
        DFS(0,0);
        printf("%.4f %d
    ",p * pow(1+r,minDepth),num);
        system("pause");
        return 0;
    }

    改进后:

    #include <bits/stdc++.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <queue>
    using namespace std;
    const int maxn = 100010;
    const double INF = 1e12;
    vector<int> child[maxn];
    double p,r,ans = INF;
    int n,minDepth = 100,num = 0;
    void DFS(int index,int depth){
        if(child[index].size() == 0){
            double price = p * pow(1+r,depth);
            if(price < ans){
                ans = price;
                num = 1;
            }else if(price == ans){
                num++;
            }
            return;
        }
        for(int i =0;i<child[index].size();++i){
            DFS(child[index][i],depth+1);
        }
    }
    int main(){
        int father,root;
        scanf("%d%lf%lf",&n,&p,&r);
        r /= 100;
        for(int i=0;i<n;++i){
            scanf("%d",&father);
            if(father != 0){
                //child[father].push_back(i);
                for(int j = 0;j<father;++j){
                    int t;
                    scanf("%d",&t);
                    child[i].push_back(t);
                }
            }
        }
        DFS(0,0);
        printf("%.4f %d
    ",ans,num);
        system("pause");
        return 0;
    }
  • 相关阅读:
    设置文本框的 placeholder 的颜色
    CSS单行文字超出省略
    【持续跟新】剑指Offer_Java实现
    Android必修课-Activity生命周期
    如何查看Android的jks签名的MD5
    Flutter 文字边框/边框颜色
    Flutter initState 初始化调用 Provide报错
    flutter 系统通知栏Demo 基于flutter_local_notifications: ^1.4.1
    # Flutter学习笔记(一)
    一个技术人毕业到就业的思考
  • 原文地址:https://www.cnblogs.com/JasonPeng1/p/12236947.html
Copyright © 2011-2022 走看看