PAT 1079. Total Sales of Supply Chain (25)
http://www.patest.cn/contests/pat-a-practise/1079
和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 pro[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 freopen("input", "r", stdin); 38 int n; 39 double p, r; 40 int i; 41 memset(first, 0xff, sizeof(first)); 42 memset(pro, 0xff, sizeof(pro)); 43 scanf("%d %lf %lf", &n, &p, &r); 44 int now_edge = 0; 45 for (i = 0; i < n; ++i) { 46 int k; 47 scanf("%d", &k); 48 if (0 == k) { 49 scanf("%d", pro + i); 50 continue; 51 } 52 int j; 53 for (j = 0; j < k; ++j) { 54 scanf("%d", v + now_edge); 55 u[now_edge] = i; 56 next[now_edge] = first[i]; 57 first[i] = now_edge; 58 ++now_edge; 59 } 60 } 61 root = 0; 62 int max_deep = bfs(); 63 double ans = 0; 64 for (int i = 0; i < n; ++i) { 65 if (pro[i] > 0) { 66 ans += pow(1.0 + r / 100, deep[i]) * p * pro[i]; 67 } 68 } 69 printf("%.1lf\n", ans); 70 return 0; 71 }

浙公网安备 33010602011771号