#include<stdcpp.h>
using namespace std;
class Solution{
public:
    int people_counter(
        vector<vector<int> > nodes, int k, int prev, long long & ans, int seats
    ){
        int people = 1;
        for(int node : nodes[k]){
            if(node == prev){continue;}
            people+=people_counter(nodes,node,k, ans, seats);
        }
        if(k > 0)
            ans += (people+seats - 1)/seats;
        return people;
    }
    long long minimumFuelCost(vector<vector<int> >& roads, int seats){
        vector<vector<int> >nodes(roads.size() + 1); 
        for(vector<int> edge: roads){
            const int u = edge[0], v = edge[1];
            nodes[u].push_back(v);
            nodes[v].push_back(u);
        }
        long long ans = 0;
        people_counter(nodes,0, -1, ans, seats);
        cout<<ans<<endl;
        return ans;
    }
};

int main(){
    Solution sol;
    vector<int> rd1 = {3,1};
    vector<int> rd2 = {3,2};
    vector<int> rd3 = {1,0};
    vector<int> rd4 = {0,4};
    vector<int> rd5 = {0,5};
    vector<int> rd6 = {4,6};
    vector<vector<int> >ex1 = {rd1,rd2,rd3,rd4,rd5,rd6};
    sol.minimumFuelCost(ex1, 2);

    rd1[0]=0; rd1[1] = 1;
    rd2[0]=0; rd2[1] = 2;
    rd3[0]=0; rd3[1] = 3;
    vector<vector<int> >ex2 = {rd1,rd2,rd3};

    sol.minimumFuelCost(ex2, 5);

    vector<vector<int> >ex3 ;
    sol.minimumFuelCost(ex3,1);



    
}