The Number Games CodeForces - 980E (树, 贪心)
大意: 给定$n$节点树, 求删除$k$个节点, 使得删除后还为树, 且剩余点$\sum{2^i}$尽量大
维护一个集合$S$, 每次尽量添加最大的点即可
这样的话需要支持求点到集合的最短距离, 直接用线段树进行子树更新就行了
就是说每次添加一个点$x$, 显然只会影响到$x$子树的距离
用线段树维护每个点在$S$中的祖先的最大深度$v$, 即用$dep[x]$更新$x$子树
则一个点$y$到$S$的最短距离就为$D=dep[y]-v[y]$
若剩余点大于等于$D$, 说明可以添加$y$, 否则再考虑比$y$小的点
复杂度$O(nlogn)$
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <vector>
#define PER(i,a,n) for(int i=n;i>=a;--i)
#define REP(i,a,n) for(int i=a;i<=n;++i)
#define pb push_back
#define mid ((l+r)>>1)
#define lc (o<<1)
#define rc (lc|1)
#define ls lc,l,mid
#define rs rc,mid+1,r
using namespace std; const int N = 1e6+10, INF = 0x3f3f3f3f;
int n, k, res, dep[N], vis[N];
int L[N], R[N], fa[N];
int v[N<<2];
vector<int> g[N]; void dfs(int x, int f) {
L[x]=++*L, dep[x] = dep[f]+1, fa[x]=f;
for (int y:g[x]) if (y!=f) {
dfs(y,x);
}
R[x]=*L;
} void upd(int o, int l, int r, int ql, int qr, int k) {
if (l>qr||r<ql||k<=v[o]) return;
if (ql<=l&&r<=qr) return v[o]=k,void();
upd(ls,ql,qr,k),upd(rs,ql,qr,k);
} int qry(int o, int l, int r, int x) {
if (l==r) return v[o];
v[lc]=max(v[lc],v[o]);
v[rc]=max(v[rc],v[o]);
if (mid>=x) return qry(ls,x);
return qry(rs,x);
} void add(int x) {
if (vis[x]) return;
--res;
vis[x] = 1, upd(1,1,n,L[x],R[x],dep[x]);
add(fa[x]);
} int main() {
scanf("%d%d", &n, &k);
REP(i,2,n) {
int x, y;
scanf("%d%d", &x, &y);
g[x].pb(y), g[y].pb(x);
}
dep[n] = -1, dfs(n,n);
vis[n] = 1;
res = n-k-1;
PER(i,1,n-1) if (!vis[i]) {
if (dep[i]-qry(1,1,n,L[i])>res) continue;
add(i);
if (!res) break;
}
REP(i,1,n) if (!vis[i]) printf("%d ", i);
puts("");
}
The Number Games CodeForces - 980E (树, 贪心)的更多相关文章
- Codeforces 980E The Number Games 贪心 倍增表
原文链接https://www.cnblogs.com/zhouzhendong/p/9074226.html 题目传送门 - Codeforces 980E 题意 $\rm Codeforces$ ...
- Codeforces 980 E. The Number Games
\(>Codeforces \space 980 E. The Number Games<\) 题目大意 : 有一棵点数为 \(n\) 的数,第 \(i\) 个点的点权是 \(2^i\) ...
- CF980E The Number Games【树链剖分/线段树】
CF980E The Number Games 题意翻译 Panel 国将举办名为数字游戏的年度表演.每个省派出一名选手. 国家有 n 个编号从 1 到 n 的省,每个省刚好有一条路径将其与其他省相连 ...
- CF980E The Number Games
CF980E The Number Games 给定一棵大小为 \(n\) 的树,第 \(i\) 个点的点权为 \(2^i\) ,删掉 \(k\) 个点及其连边,使得剩下的点组成一个连通块,且权值和最 ...
- poj3764(dfs+Trie树+贪心)
题目链接:http://poj.org/problem?id=3764 分析:好题!武森09年的论文中有道题CowXor,求的是线性结构上的,连续序列的异或最大值,用的办法是先预处理出前n项的异或值, ...
- BZOJ_1826_[JSOI2010]缓存交换 _线段树+贪心
BZOJ_1826_[JSOI2010]缓存交换 _线段树+贪心 Description 在计算机中,CPU只能和高速缓存Cache直接交换数据.当所需的内存单元不在Cache中时,则需要从主存里把数 ...
- Bzoj5251 线段树+贪心
Bzoj5251 线段树+贪心 记录本蒟蒻省选后的第一篇题解!国际惯例的题面:首先这个东西显然是一棵树.如果我们把数值排序,并建立这棵树的dfs序,显然dfs序上的一个区间对应数值的一个区间,且根为数 ...
- 【NOI2015】荷马史诗[Huffman树+贪心]
#130. [NOI2015]荷马史诗 统计 描述 提交 自定义测试 追逐影子的人,自己就是影子. ——荷马 Allison 最近迷上了文学.她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅读 ...
- 2018.10.20 NOIP模拟 蛋糕(线段树+贪心/lis)
传送门 听说是最长反链衍生出的对偶定理就能秒了. 本蒟蒻直接用线段树模拟维护的. 对于第一维排序. 维护第二维的偏序关系可以借助线段树/树状数组维护逆序对的思想建立权值线段树贪心求解. 代码
随机推荐
- python之路----socketserver模块
socketserver import socketserver class MyServer(socketserver.BaseRequestHandler): def handle(self): ...
- python的时间处理-time模块
time模块 时间的表示方法有三种: 时间戳:表示的是从1970年1月1日0点至今的秒数 格式化字符串表示:这种表示更习惯我们通常的读法,如2018-04-24 00:00:00 格式化元祖表示:是一 ...
- Python入门之Pycharm开发中最常用快捷键
要查阅Pycharm的快捷键,当然要看官方文档,https://www.jetbrains.com/help/pycharm/mastering-keyboard-shortcuts.html 编辑类 ...
- Jsp获取Java的重定向赋值(String)
Jsp获取Java的重定向赋值(String) Java代码片段: //传递String request.setAttribute("msg", msg); //重定向 reque ...
- 20145208 蔡野《网络对抗》Exp3 Advanced 恶意代码伪装技术实践
20145208 蔡野<网络对抗>Exp3 Advanced 恶意代码伪装技术实践 木马化正常软件 思路: 在正常软件包中将原本的程序主文件(平时打开程序用的exe文件)改成dll后缀(或 ...
- MFC使用MsComm做串口通信
一.注册MSCOMM 1.下载控件MSCOMM32.OCX(32位),mswnisck.ocx(64位) 2.把这个ocx文件放在c盘WIndows的system32里,打开cmd执行:regsvr3 ...
- Python3基础 函数 局部与全局变量同名,各管各的
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- 分布式系统一致性协议--Paxos算法
Paxos: Paxos算法背景介绍: Paxos算法是分布式技术大师Lamport提出的,主要目的是通过这个算法,让参与分布式处理的每个参与者逐步达成一致意见.用好理解的方式来说,就是在一个选举过程 ...
- 【maven】在IDEA上 使用maven进行打包时报错:Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.10.3:jar
报错内容如下: [INFO] ------------------------------------------------------------------------ [INFO] BUILD ...
- 【详解】Dubbo的原理以及详细原理、配置
Dubbo的背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. Dubbo的应用 用于大规模 ...