CF1336A
题目简化和分析:
明确一点这是一棵树。
为了保证每个工业城市的设置效益最大,应该设在最深的节点。
从深到浅,可以使用优先队列去实现。
设置一个的价值为 \(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;
}
随机推荐
- React后台管理系统07 首页布局
注释掉App.tsx中的几个路由组件: 将Home.tsx中的代码使用ant Design网站中的布局进行替换 复制的代码如下: import { DesktopOutlined, FileOutli ...
- 3 分钟为英语学习神器 Anki 部署一个专属同步服务器
原文链接:https://icloudnative.io/posts/anki-sync-server/ Anki 介绍 Anki 是一个辅助记忆软件,其本质是一个卡片排序工具--即依据使用者对卡片上 ...
- AI-4多层感知机
4.1笔记 在线性网络中,任何特征的增大都会导致模型输出的增大或减小.这种想法在某些情况下不在适用,例如x和y并非线性关系.或者是x和y并不具有单调性.以及x1.x2会对y产生交互作用时. 为解决该问 ...
- 在mapper.xml中遍历添加多条数据
<insert id="saveAuditDf" parameterType="java.util.List"> insert into audit ...
- 【小小demo】SpringBoot+Layui登录
easy-login 基于layui 注册.登录简单实现,并他通过拦截器拦截未登录请求. 项目地址文章末尾 登录拦截器 SystemInterceptor preHandle在 Controller ...
- spring-boot-plus2.7.12版本重磅发布,三年磨一剑,兄弟们等久了,感谢你们的陪伴
Everyone can develop projects independently, quickly and efficiently! spring-boot-plus是一套集成spring bo ...
- Android LinearLayout快速设置每个item间隔
原文地址: Android LinearLayout快速设置每个item间隔 平常使用LinearLayout的时候,有时候会需要对每个item设置间距,但是每个item都加上margin的方法实在有 ...
- Centos7制作本地yum仓库,共享给局域网其他设备
环境准备: 准备好安装好Centos7的虚机A(服务端)和虚机B(客户端) 配置两台虚机网络使其互通,关闭selinux和firewalld等限制 下载完整的ISO镜像(CentOS-7-x86_64 ...
- VScode 中golang 调试 F5,json文件内容更改 Go
调试:在Vscode软件中调试.go文件代码 1.1.1 确保调试文件正常运行 准备好.go文件,并且该文件能正常运行,终端输入命令运行程序,如:go run time.go 测试代码: packag ...
- 应用程序通过 Envoy 代理和 Jaeger 进行分布式追踪(一)
Istio 支持通过 Envoy 代理进行分布式追踪,代理自动为其应用程序生成追踪 span,只需要应用程序转发适当的请求上下文即可.Istio 支持很多追踪系统,包括 Zipkin, Jaeger, ...