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 }

 

posted @ 2015-07-29 16:19  ACSeed  Views(179)  Comments(0)    收藏  举报