Cowntagion (USACO Silver 2020 December)

Cowntagion (USACO Silver 2020 December)

思路:一个farm得到病例的方法,除了第一头牛之外,都是本地繁殖更快(因为至少产生一头,或者产生多头,而移动过来的每步只能有一头)。

所以,贪心策略:繁殖够直接儿子需要数量的牛,然后一步步送到儿子那里,然后每个儿子同样处理。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
 
int n;
vector<int> adj[100005];
 
int ans;
 
void dfs(int s, int e) {
    int c = adj[s].size();
    if (e != 0)
        c--;
    int x = 1;
    while (x < c+1) {
        ans++;
        x = x << 1;
    }
    ans += c;   // move to children
    for (int v: adj[s]) {
        if (v != e)
            dfs(v, s);
    }
}
 
int main() {
    scanf("%d", &n);
    for (int i = 0; i < n-1; i++) {
        int u,v;
        scanf("%d %d", &u, &v);
        adj[u].push_back(v);
        adj[v].push_back(u);
    }
    dfs(1, 0);
    printf("%d", ans);
    return 0;
}