计算节点的子节点数,使用贪心策略,让一辆车尽量载更多的人
class Solution {
public:
vector<vector<int>> adj;
long long res=0;
long long dfs(int now,int seats,int pre)
{
long long cnt=1;
for(auto x:adj[now])
{
if(x!=pre) cnt+=dfs(x,seats,now);
}
long long tmp=cnt/seats;
if(cnt%seats!=0) tmp++;
if(now!=0) res+=tmp;
return cnt;
}
long long minimumFuelCost(vector<vector<int>>& roads, int seats) {
int n=roads.size()+1;
adj.resize(n);
for(auto x:roads)
{
int a=x[0],b=x[1];
adj[a].push_back(b);
adj[b].push_back(a);
}
dfs(0,seats,-1);
return res;
}
};