Collect Coins in a Tree - Problem

There exists an undirected and unrooted tree with n nodes indexed from 0 to n - 1. You are given an integer n and a 2D integer array edges of length n - 1, where edges[i] = [ai, bi] indicates that there is an edge between nodes ai and bi in the tree.

You are also given an array coins of size n where coins[i] can be either 0 or 1, where 1 indicates the presence of a coin in the vertex i.

Initially, you choose to start at any vertex in the tree. Then, you can perform the following operations any number of times:

  • Collect all the coins that are at a distance of at most 2 from the current vertex, or
  • Move to any adjacent vertex in the tree.

Find the minimum number of edges you need to go through to collect all the coins and go back to the initial vertex.

Note that if you pass an edge several times, you need to count it into the answer several times.

Input & Output

Example 1 — Linear Tree with End Coins
$ Input: coins = [1,0,0,0,0,1], edges = [[0,1],[1,2],[2,3],[3,4],[4,5]]
Output: 6
💡 Note: Start at node 2. Collect coin at 0 (distance 2). Move to 4, collect coin at 5 (distance 1). Return to 2. Total moves: 2 + 2 + 2 = 6
Example 2 — Tree with Adjacent Coins
$ Input: coins = [0,0,1,0,0,0], edges = [[0,1],[1,2],[1,3],[3,4],[4,5]]
Output: 2
💡 Note: Start at node 1. Collect coin at node 2 (distance 1). No need to visit other branches. Total moves: 1 + 1 = 2
Example 3 — Single Node with Coin
$ Input: coins = [1], edges = []
Output: 0
💡 Note: Only one node with a coin. Start there, collect it immediately. No movement needed.

Constraints

  • 1 ≤ coins.length ≤ 3 × 104
  • 0 ≤ coins[i] ≤ 1
  • edges.length == coins.length - 1
  • edges[i].length == 2
  • 0 ≤ ai, bi < coins.length
  • The input represents a valid tree

Visualization

Tap to expand
INPUT TREETRIMMING PROCESSOPTIMAL RESULT012345Coins at nodes 0 and 51Remove leaf nodeswithout coins2Repeat trimmingfor distance-2 rule3Keep essential nodesfor coin collection4Calculate traversal2 × remaining edges0235Result: 63 edges × 2 = 6 movesKey Insight:Only visit nodes needed to collect coins or reach coin-containing nodesTutorialsPoint - Collect Coins in a Tree | Tree Trimming Approach
Asked in
Google 15 Meta 12 Amazon 8 Microsoft 6
23.0K Views
Medium Frequency
~35 min Avg. Time
890 Likes
Ln 1, Col 1
Smart Actions
💡 Explanation
AI Ready
💡 Suggestion Tab to accept Esc to dismiss
// Output will appear here after running code
Code Editor Closed
Click the red button to reopen