当前位置:网站首页>codeforces Linova and Kingdom
codeforces Linova and Kingdom
2022-08-02 14:22:00 【先求一个导】
题目
题意: 给定以1为根的树,选择恰好k个点染黑色,其余点为白色。这k个点的幸福值为其到树根的最短路上白色点的个数,问和最大为多少。
思路: 贪心。首先深度深的叶子最优,其次就不好说了,选了父节点子节点贡献就会减少。不妨把子节点贡献减少的值交给父节点,这样总和不变,可以据此直接排序选出贡献最大的k个点。
时间复杂度: O(nlogn)
代码:
// Problem: A. Linova and Kingdom
// Contest: Codeforces - Codeforces Round #635 (Div. 1)
// URL: https://codeforces.com/problemset/problem/1336/A
// Memory Limit: 256 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+10;
int n,m,k,T;
vector<int> va[N];
int sz[N];
int ans[N];
void dfs(int cur,int fa,int d)
{
sz[cur] = 1;
for(auto j:va[cur])
{
if(j==fa) continue;
dfs(j,cur,d+1);
sz[cur] += sz[j];
}
// if(cur==4) cout<<d<<" "<<sz[cur]<<"\n";
ans[cur] = d - sz[cur] + 1;
}
void solve()
{
cin>>n>>k;
for(int i=0;i<n-1;++i)
{
int x,y; cin>>x>>y;
va[x].push_back(y),va[y].push_back(x);
}
dfs(1,0,0);
// for(int i=1;i<=n;++i) cout<<i<<":"<<ans[i]<<"\n";
sort(ans+1,ans+n+1);
int now = n;
long long res = 0;
while(k--)
{
res += ans[now--];
}
cout<<res;
}
signed main(void)
{
solve();
return 0;
}
边栏推荐
猜你喜欢
Impulse response invariant method and bilinear transformation method for IIR filter design
一文让你快速手写C语言-三子棋游戏
移除元素 - 双指针
如何使用Swiper外部插件写一个轮播图
2021年度总结——收获圆满的一年
【IP基本原理-ARP原理】
JS中的数组方法和循环
2022-0801 第六小组 瞒春 学习笔记
lambda表达式、Stream接口及Optional类
[Fault Diagnosis] Weak Fault Diagnosis of Fan Bearing Based on PSO_VMD_MCKD Method
随机推荐
DOM —— 事件类型
什么是Nacos?
2022-07-08 第五小组 瞒春 户外拓展
lammps学习(一)单晶硅纳米磨削
nvm管理node版本 nodenpm不是内部或外部命令,也不是可运行的程序
2021年华为杯数学建模竞赛E题——信号干扰下的超宽带(UWB)精确定位问题
【网络设备远程登陆配置SSH/Telnet 】
EL 表达式 & JSTL 标签库
2022-07-29 第六小组 瞒春 学习笔记
基于Visual Studio 2015的CUDA编程(一):基本配置
【Anaconda】一行语句解决Spyder启动问题
2022-7-12 第五组 瞒春 学习报告
CSV file with the data read and write 】 【 XLS/XLSX file
JSP技术
【web渗透】文件包含漏洞入门级超详细讲解
解决(An error happened during template parsing (template: “class path resource [templates/...]
DOM —— 事件代理
排列熵、模糊熵、近似熵、样本熵的原理及MATLAB实现之近似熵
2022-0801 第六小组 瞒春 学习笔记
DOM —— 事件机制及事件链