class Solution {
public:
int f[100005];//f[i]表示i节点有几个子节点
int vis[100005];
long long value[100005];
void dfs(vector<vector<int>>& re,int st,int seats)
{
int num=0;
long long value1=0;
vis[st]=1;
for(int i=0;i<re[st].size();i++)
{
if(!vis[re[st][i]])
{
vis[re[st][i]]=1;
dfs(re,re[st][i],seats);
num+=f[re[st][i]];
value1+=value[re[st][i]];
}
else{
num+=f[re[st][i]];
value1+=value[re[st][i]];
}
}
num++;//加上自己
if(num==1) value[st]=1;
f[st]=num;
long long k=0;
if(st!=0)
{
if(num%seats==0)
{
k=num/seats;
}
else{
k=num/seats+1;
}
}
value[st]=value1+k;
}
long long minimumFuelCost(vector<vector<int>>& roads, int seats) {
vector<vector<int>>re(roads.size()+1);
for(int i=0;i<roads.size();i++)
{
re[roads[i][1]].push_back(roads[i][0]);
re[roads[i][0]].push_back(roads[i][1]);
}
dfs(re,0,seats);
return value[0];
}
};