Loading...
Submission
# When Author Problem Language CPU Memory
20875 2024-06-13 22:49:31 AHAMMED_99 Bonus Project C 6 ms 7632 kb Wrong Answer - 1
Test Cases
# CPU Memory Points
1 6 ms 7632 kb 0 Wrong Answer
2 0 ms 0 kb 0 Skipped
3 0 ms 0 kb 0 Skipped
4 0 ms 0 kb 0 Skipped
5 0 ms 0 kb 0 Skipped
Source Code
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define MAXN 500000
  5.  
  6. typedef struct Node {
  7. int employee;
  8. struct Node* next;
  9. } Node;
  10.  
  11. typedef struct {
  12. Node* head;
  13. } List;
  14.  
  15. List adjList[MAXN + 1];
  16. int initialBalance[MAXN + 1];
  17. int finalBalance[MAXN + 1];
  18. int subordinates[MAXN + 1];
  19.  
  20. void addEdge(int u, int v) {
  21. Node* newNode = (Node*)malloc(sizeof(Node));
  22. newNode->employee = v;
  23. newNode->next = adjList[u].head;
  24. adjList[u].head = newNode;
  25. }
  26.  
  27. void dfs(int node, int parent) {
  28. subordinates[node] = 1;
  29. Node* temp = adjList[node].head;
  30. while (temp) {
  31. int child = temp->employee;
  32. if (child != parent) {
  33. dfs(child, node);
  34. subordinates[node] += subordinates[child];
  35. }
  36. temp = temp->next;
  37. }
  38. }
  39.  
  40. void distributeBonuses(int node, int bonus) {
  41. finalBalance[node] += bonus;
  42. Node* temp = adjList[node].head;
  43. while (temp) {
  44. int child = temp->employee;
  45. distributeBonuses(child, bonus);
  46. temp = temp->next;
  47. }
  48. }
  49.  
  50. void clearGraph(int n) {
  51. for (int i = 1; i <= n; i++) {
  52. Node* temp = adjList[i].head;
  53. while (temp) {
  54. Node* toDelete = temp;
  55. temp = temp->next;
  56. free(toDelete);
  57. }
  58. adjList[i].head = NULL;
  59. }
  60. }
  61.  
  62. int main() {
  63. int T;
  64. scanf("%d", &T);
  65.  
  66. while (T--) {
  67. int N, Q;
  68. scanf("%d %d", &N, &Q);
  69.  
  70. for (int i = 1; i <= N; i++) {
  71. scanf("%d", &initialBalance[i]);
  72. finalBalance[i] = initialBalance[i];
  73. adjList[i].head = NULL;
  74. subordinates[i] = 0;
  75. }
  76.  
  77. for (int i = 0; i < N - 1; i++) {
  78. int A, B;
  79. scanf("%d %d", &A, &B);
  80. addEdge(A, B);
  81. }
  82.  
  83. dfs(1, -1); // Calculate subordinates
  84.  
  85. for (int i = 0; i < Q; i++) {
  86. int X, Y;
  87. scanf("%d %d", &X, &Y);
  88. finalBalance[X] += 2 * Y; // Team leader gets double bonus
  89. distributeBonuses(X, Y);
  90. }
  91.  
  92. for (int i = 1; i <= N; i++) {
  93. printf("%d ", finalBalance[i]);
  94. }
  95. printf("\n");
  96.  
  97. clearGraph(N); // Clear graph for the next test case
  98. }
  99.  
  100. return 0;
  101. }
  102.