PAT 甲级 Highest Price in Supply Chain (25)

Highest Price in Supply Chain (25)


参考来源:http://blog.csdn.net/zhangpiu/article/details/50788589           感觉这个写的不错,于是拿下来学习

    #include <iostream>  
    #include <cstdio>  
    #include <vector>  
    #include <cmath>  
      
    using namespace std;  
      
    vector<vector<int>> chains;  
    int maxLevel = 0;  
    int maxNum = 0;  
      
    void dfs(int src, int level){  
        if(chains[src].empty()){        //vector中empty方法的使用
            if(maxLevel < level){  
                maxLevel = level;  
                maxNum = 1;  
            }else if(maxLevel == level){  
                maxNum++;  
            }  
      
            return;  
        }  
      
        for(auto& next : chains[src]){     //auto的使用
            dfs(next, level + 1);  
        }  
    }  
      
    int main(){  
        int n;  
        double p,r;  
        cin >> n >> p >> r;  
      
        chains.resize(n, vector<int>());     //vector中resize方法的使用,写成chain.resize(n)也可以,自动调用构造函数初始化
        int root = -1;  
        for(int i = 0; i < n; ++i){  
            int s;  
            scanf("%d", &s);  
            if(s == -1) root = i;  
            else chains[s].push_back(i);      //vector中push_back的使用
        }  
      
        dfs(root, 0);  
        printf("%.2f %d", p * pow(1+r/100, maxLevel), maxNum);    //pow的使用
      
        return 0;  
    }  
Vector

1、resize

resize是改变容器的大小,并且创建对象,因此,调用这个函数之后,就可以引用容器内的对象了,因此当加入新的元素时,用operator[]操作符,或者用迭代器来引用元素对象

resize(n) 
调整容器的长度大小,使其能容纳n个元素。
如果n小于容器的当前的size,则删除多出来的元素。
否则,调用元素对象的默认构造函数来初始化。
resize(n,t)
多一个参数t,将所有新添加的元素初始化为t。

2、reserve是容器预留空间,但并不真正创建元素对象,在创建对象之前,不能引用容器内的元素,因此当加入新的元素时,需要用push_back()/insert()函数。

push_back是在尾部追加元素,如果是reserve(3),push_back(1), 那么vector<int> vec, vec[0]为1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值