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;
    }
  • 相关阅读:
    2、基础知识点回顾
    jQuery事件二
    71、auth模块、bbs项目关系表
    PYthon-4.26作业
    PYthon-线程
    PYthon-4.23作业
    PYthon-4.15作业
    PYthon-4.9作业
    PYthon-4.7作业
    PYthon-3.31作业
  • 原文地址:https://www.cnblogs.com/JasonPeng1/p/12236947.html
Copyright © 2011-2022 走看看