题目简化和分析:

明确一点这是一棵树。

为了保证每个工业城市的设置效益最大,应该设在最深的节点。

从深到浅,可以使用优先队列去实现。

设置一个的价值为 \(dep_u-siz_u-1\)。

关于作者一开始想反了,设置旅游城市,虽然可以做,但非常麻烦,于是看了别人大佬思路才明白。

错误原因在于,有可能儿子先设置了,而他的祖先却没有,会导致重复计算。

大家引以为戒。

Solution:

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef double db; const int N=4e5+50;
const int M=1e5+50;
const int Mod=1e9+7; inline int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
} int n,k;
struct edge{
int to,next;
}e[N];
int head[N],cnt;
void add_edge(int u,int v){
++cnt;
e[cnt].to=v;
e[cnt].next=head[u];
head[u]=cnt;
}
priority_queue<int>q;
int siz[N],dep[N];
void dfs(int u,int p){
dep[u]=dep[p]+1;
for(int i=head[u];i;i=e[i].next){
int y=e[i].to;
if(y==p) continue;
dfs(y,u);
siz[u]+=siz[y];
}
q.push(dep[u]-siz[u]-1);
++siz[u];
}
int main()
{
n=read(),k=read();
for(int i=1;i<n;++i){
int u,v;
u=read(),v=read();
add_edge(u,v);
add_edge(v,u);
}
dfs(1,0);
ll ans=0;
while(k){
--k;
ans+=q.top();
q.pop();
}
printf("%lld\n",ans);
return 0;
}

随机推荐

  1. React后台管理系统07 首页布局

    注释掉App.tsx中的几个路由组件: 将Home.tsx中的代码使用ant Design网站中的布局进行替换 复制的代码如下: import { DesktopOutlined, FileOutli ...

  2. 3 分钟为英语学习神器 Anki 部署一个专属同步服务器

    原文链接:https://icloudnative.io/posts/anki-sync-server/ Anki 介绍 Anki 是一个辅助记忆软件,其本质是一个卡片排序工具--即依据使用者对卡片上 ...

  3. AI-4多层感知机

    4.1笔记 在线性网络中,任何特征的增大都会导致模型输出的增大或减小.这种想法在某些情况下不在适用,例如x和y并非线性关系.或者是x和y并不具有单调性.以及x1.x2会对y产生交互作用时. 为解决该问 ...

  4. 在mapper.xml中遍历添加多条数据

    <insert id="saveAuditDf" parameterType="java.util.List"> insert into audit ...

  5. 【小小demo】SpringBoot+Layui登录

    easy-login 基于layui 注册.登录简单实现,并他通过拦截器拦截未登录请求. 项目地址文章末尾 登录拦截器 SystemInterceptor preHandle在 Controller ...

  6. spring-boot-plus2.7.12版本重磅发布,三年磨一剑,兄弟们等久了,感谢你们的陪伴

    Everyone can develop projects independently, quickly and efficiently! spring-boot-plus是一套集成spring bo ...

  7. Android LinearLayout快速设置每个item间隔

    原文地址: Android LinearLayout快速设置每个item间隔 平常使用LinearLayout的时候,有时候会需要对每个item设置间距,但是每个item都加上margin的方法实在有 ...

  8. Centos7制作本地yum仓库,共享给局域网其他设备

    环境准备: 准备好安装好Centos7的虚机A(服务端)和虚机B(客户端) 配置两台虚机网络使其互通,关闭selinux和firewalld等限制 下载完整的ISO镜像(CentOS-7-x86_64 ...

  9. VScode 中golang 调试 F5,json文件内容更改 Go

    调试:在Vscode软件中调试.go文件代码 1.1.1 确保调试文件正常运行 准备好.go文件,并且该文件能正常运行,终端输入命令运行程序,如:go run time.go 测试代码: packag ...

  10. 应用程序通过 Envoy 代理和 Jaeger 进行分布式追踪(一)

    Istio 支持通过 Envoy 代理进行分布式追踪,代理自动为其应用程序生成追踪 span,只需要应用程序转发适当的请求上下文即可.Istio 支持很多追踪系统,包括 Zipkin, Jaeger, ...