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;
}