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 |
Source Code
#include <stdio.h> #include <stdlib.h> #define MAXN 500000 typedef struct Node { int employee; struct Node* next; } Node; typedef struct { Node* head; } List; List adjList[MAXN + 1]; int initialBalance[MAXN + 1]; int finalBalance[MAXN + 1]; int subordinates[MAXN + 1]; void addEdge(int u, int v) { newNode->employee = v; newNode->next = adjList[u].head; adjList[u].head = newNode; } void dfs(int node, int parent) { subordinates[node] = 1; Node* temp = adjList[node].head; while (temp) { int child = temp->employee; if (child != parent) { dfs(child, node); subordinates[node] += subordinates[child]; } temp = temp->next; } } void distributeBonuses(int node, int bonus) { finalBalance[node] += bonus; Node* temp = adjList[node].head; while (temp) { int child = temp->employee; distributeBonuses(child, bonus); temp = temp->next; } } void clearGraph(int n) { for (int i = 1; i <= n; i++) { Node* temp = adjList[i].head; while (temp) { Node* toDelete = temp; temp = temp->next; } adjList[i].head = NULL; } } int main() { int T; while (T--) { int N, Q; for (int i = 1; i <= N; i++) { finalBalance[i] = initialBalance[i]; adjList[i].head = NULL; subordinates[i] = 0; } for (int i = 0; i < N - 1; i++) { int A, B; addEdge(A, B); } dfs(1, -1); // Calculate subordinates for (int i = 0; i < Q; i++) { int X, Y; finalBalance[X] += 2 * Y; // Team leader gets double bonus distributeBonuses(X, Y); } for (int i = 1; i <= N; i++) { } clearGraph(N); // Clear graph for the next test case } return 0; }