LOADING

加载过慢请开启缓存,浏览器默认开启

daily 1

2023/3/21 daily

CF 1336Ad

简单贪心,对于每个工业国,如果选到了它那么他的子树肯定都被选择了,那么贡献就是dep[i]-(siz[i]-1);
之后sort一下再计算就好了

void solve(){
  int n,k;cin>>n>>k;
  vector<vector<int>>E(n+1);
  for(int i=0;i<n-1;++i){
    int a,b;cin>>a>>b;
    E[a].push_back(b);
    E[b].push_back(a);
  }
  vector<ll>dep(n+1),siz(n+1);
  function<void(int,int)>dfs=[&](int x,int f){
    siz[x]=1;
    for(int v:E[x]){
        if(v==f)continue;
        dep[v]=dep[x]+1;
        dfs(v,x);
        siz[x]+=siz[v];
    }
    dep[x]-=(siz[x]-1);
  };
  dfs(1,0);
  sort(dep.begin()+1,dep.end(),greater<ll>());
  ll ans=accumulate(dep.begin()+1,dep.begin()+k+1,0ll);
  cout<<ans<<'\n';
  return;
}

这两天都少做点,准备面试了,要背的东西太多了