---
# System prepended metadata

title: 2477. Minimum Fuel Cost to Report to the Capital
tags: [Leetcode, Tree, DFS, Medium]

---

# 2477. Minimum Fuel Cost to Report to the Capital
###### tags: `Leetcode` `Medium` `DFS` `Tree`
Link: https://leetcode.com/problems/minimum-fuel-cost-to-report-to-the-capital/description/
## 思路
和[2467. Most Profitable Path in a Tree](https://hackmd.io/wgTl8LzpQTCJ1siUYKtUHw)方法差不多
参考[这里](https://leetcode.com/problems/minimum-fuel-cost-to-report-to-the-capital/solutions/2831676/c-java-python3-simple-dfs-o-n/)

DFS
- Imagine you are at a leaf node, you move towards 0. There will be only 1 person in the car (you)
- Now let's say you're somewhere in the middle of the tree, with a car of size 5. You have 3 children nodes. Let's say each child node brings 1 car of 3 people. So a total of 3 * 3 = 9 people. Including you there are 10 people now. Now you have 3 cars from the child nodes and one car of your own. You actually need just 10 / 5 = 2 cars. You take 2 cars and move towards 0
## Code
```java=
class Solution {
    long ans = 0;
    public long minimumFuelCost(int[][] roads, int seats) {
        List<List<Integer>> graph = new ArrayList<>();
        int n = roads.length+1;
        for(int i=0; i<n; i++) graph.add(new ArrayList<>());
        for(int[] road:roads){
            graph.get(road[0]).add(road[1]);
            graph.get(road[1]).add(road[0]);
        }
        dfs(0, 0, seats, graph);
        return ans;
    }
    public int dfs(int cur, int prev, int seats, List<List<Integer>> graph){
        int people = 1;
        for(int next:graph.get(cur)){
            if(next==prev) continue;
            people += dfs(next, cur, seats, graph);
        }
        if(cur!=0) ans += (people+seats-1)/seats;
        return people;
    }
}
```