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;
}
#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;
}
相关文章推荐
- 1090. Highest Price in Supply Chain (25)
- 1090. Highest Price in Supply Chain (25)
- PAT甲级真题及训练集(22)--1090. Highest Price in Supply Chain (25)
- PAT 1090. Highest Price in Supply Chain (25) 必须用double,未解之谜
- PAT 1090. Highest Price in Supply Chain (25)(DFS啊 )
- 1090. Highest Price in Supply Chain (25)【树】——PAT (Advanced Level) Practise
- PAT (Advanced Level) Practise 1090 Highest Price in Supply Chain (25)
- 1090. Highest Price in Supply Chain (25)
- PAT (Advanced Level) 1090. Highest Price in Supply Chain (25)
- 1090. Highest Price in Supply Chain (25)
- 1090. Highest Price in Supply Chain (25)
- PAT (Advanced Level) Practise 1090 Highest Price in Supply Chain (25)
- PAT-A-1090. Highest Price in Supply Chain (25)
- 1090. Highest Price in Supply Chain (25)
- 1090. Highest Price in Supply Chain (25)
- PAT 1090. Highest Price in Supply Chain (25) 从叶子节点出发去求树的高度
- 1090. Highest Price in Supply Chain (25)
- PAT 1090. Highest Price in Supply Chain (25)
- PAT - 甲级 - 1090. Highest Price in Supply Chain (25)(树的遍历DFS)
- 1090. Highest Price in Supply Chain (25)