当前位置:网站首页>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;
}
边栏推荐
- The difference and connection between dist, pdist and pdist2 in MATLAB
- 第三章-函数的增长-3.1-渐近记号
- 【SVM回归预测】基于LibSVM实现多特征数据的预测
- 2022-07-26 第六小组 瞒春 学习笔记
- 2022-0801 第六小组 瞒春 学习笔记
- 为什么四个字节的float表示的范围比八个字节的long要广?
- 【Hiflow】 开辟新道路的自动化助手!
- 从零开始的循环之旅(下)
- 【Frequency Domain Analysis】Spectral leakage, frequency resolution, picket fence effect
- 为什么四个字节的float表示的范围比八个字节的long要广
猜你喜欢
随机推荐
第六章-6.1-堆-6.2-维护堆的性质-6.3-建堆
Nvm,Nrm使用教程
网络请求——跨域 的概念
事件对象,事件流(事件冒泡和事件捕获)、事件委托、L0和L2注册等相关概念及用法
为什么四个字节的float表示的范围比八个字节的long要广?
Window function method for FIR filter design
【Hiflow】 开辟新道路的自动化助手!
2022-07-21 第六小组 瞒春 学习笔记
DOM - page rendering process
Scala的基础语法(小试牛刀)
数据源,分层开发以及jsp标签总结及相关代码
2022-07-28 第六小组 瞒春 学习笔记
【路由器与交换机的作用与特点 】
2022-07-20 第六小组 瞒春 学习笔记
JS本地存储(附实例)
详解C语言中的位操作运算符可以怎么用?
FIR滤波器设计之窗函数法
Scala的模式匹配与样例类
2021年华为杯数学建模竞赛E题——信号干扰下的超宽带(UWB)精确定位问题
idea使用jdbc对数据库进行增删改查,以及使用懒汉方式实现单例模式







