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