您的位置:首页 > 大数据 > 人工智能

1090. Highest Price in Supply Chain (25)

2015-11-23 13:12 435 查看
1.这道题目实则是一道关于的题目,树的每一层代表一个级别的供应商,树的高度越大,价格越高

如题目例子:

9 1.80 1.00
1 5 4 4 -1 4 5 3 6

构成的树为



红色部分(0和8,一共两个节点)的价格最高,为1.8*1.01*1.01*1.01=1.85

2.采用合适的数据结构存储节点,然后BFS进行层次遍历即可



AC代码:

//#include<string>
//#include <iomanip>
#include<vector>
#include <algorithm>
//#include<stack>
#include<set>
#include<queue>
#include<map>
//#include<unordered_set>
#include<unordered_map>
//#include <sstream>
//#include "func.h"
//#include <list>
#include<stdio.h>
#include<iostream>
#include<string>
#include<memory.h>
#include<limits.h>
using namespace std;
struct Node
{
vector<int> list;
Node() :list(0){};
};
int main(void)
{
int n;
double rootPrice;
double higherPercent;
cin >> n >> rootPrice >> higherPercent;
vector<Node> supplier(n);
int root;
for (int i = 0; i < n; i++)
{
int Si;
scanf("%d", &Si);
if (Si == -1) root = i;//-1为根供应商
else//i的上级供应商为Si
supplier[Si].list.push_back(i);
}

//进行层次遍历
queue<int> q;
int count1 = 1, count2 = 0;
q.push(root);
int level = 0;
int lastLevelMember = 0;
while (!q.empty())
{
for (int i = 0; i < count1; i++)
{
int head = q.front();
q.pop();
for (int j = 0; j < supplier[head].list.size(); j++)
{
q.push(supplier[head].list[j]);
count2++;
}
}
level++;
lastLevelMember = count1;
count1 = count2;
count2 = 0;
}
double highestPrice = rootPrice;
for (int i = 0; i < level-1; i++)
{//level会把root也算作1层
highestPrice *= (1 + higherPercent / 100.0);
}
printf("%.2lf %d\n", highestPrice, lastLevelMember);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: