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

1090. Highest Price in Supply Chain (25)解题报告

2016-12-28 14:55 549 查看
用一个int类型的数组来表示这个位置的元素是否被访问和该元素的深度。根结点深度为0。用一个栈来记录该元素到根的路径。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <stack>
#include <cmath>
using namespace std;

int count(int arr[], int num, int &p);

int main(int argc, char** argv) {
int num, *arr, i, cnt, p;
double price, rate, finalprice;
p = 0;
scanf("%d %lf %lf", &num, &price, &rate);
arr = new int[num];
for(i = 0; i < num; i++){
scanf("%d", &arr[i]);
}
cnt = count(arr, num, p);
finalprice = price * pow(1.0 + rate / 100, cnt);
printf("%.2lf %d\n", finalprice, p);
delete[] arr;
return 0;
}

int count(int arr[], int num, int &p){
int i, *visit, index, deep, max = -1;
stack<int> s;
visit = new int[num];
for(i = 0; i < num; i++){
visit[i] = -1;
}

for(i = 0; i < num; i++){
if(visit[i] == -1){
index = i;
while(arr[index] != -1 && visit[index] == -1){
s.push(index);
index = arr[index];
}
if(arr[index] == -1){
deep = 0;
s.push(index);
}
else{
deep = visit[index] + 1;
}
while(!s.empty()){
index = s.top();
s.pop();
visit[index] = deep++;
}
if(deep && deep - 1 > max){
p = 1;
max = deep - 1;
}
else if(deep && deep - 1 == max){
p++;
}
else if(!deep && deep > max){
max = deep;
p = 1;
}
}
}
delete[] visit;
return max;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: