PAT 1090. Highest Price in Supply Chain (25)
http://www.patest.cn/contests/pat-a-practise/1090
1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 #include<stdlib.h> 5 6 #define MAXN 100010 7 #define MAX(A, B) ((A) > (B) ? (A) : (B)) 8 9 int root; 10 int first[MAXN]; 11 int next[MAXN]; 12 int u[MAXN], v[MAXN]; 13 int fa[MAXN]; 14 int deep[MAXN]; 15 16 int queue[MAXN]; 17 int front, rear; 18 19 int bfs() { 20 memset(deep, 0, sizeof(deep)); 21 front = rear = 0; 22 int max_deep = 0; 23 queue[rear++] = root; 24 while(front < rear) { 25 int u = queue[front++]; 26 int e = first[u]; 27 for (; e != -1; e = next[e]) { 28 deep[v[e]] = deep[u] + 1; 29 max_deep = MAX(max_deep, deep[v[e]]); 30 queue[rear++] = v[e]; 31 } 32 } 33 return max_deep; 34 } 35 36 int main() { 37 int n; 38 double p, r; 39 int i; 40 memset(first, 0xff, sizeof(first)); 41 scanf("%d %lf %lf", &n, &p, &r); 42 for (i = 0; i < n; ++i) { 43 scanf("%d", fa + i); 44 if (fa[i] == -1) root = i; 45 next[i] = first[fa[i]]; 46 first[fa[i]] = i; 47 v[i] = i; 48 } 49 int max_deep = bfs(); 50 int cnt = 0; 51 for (i = 0; i < n; ++i) { 52 if (deep[i] == max_deep) ++cnt; 53 } 54 printf("%.2lf %d\n", pow((1.0 + r / 100), max_deep) * p, cnt); 55 return 0; 56 }

浙公网安备 33010602011771号