题意:

给出一棵树,要求去掉k个点,使得剩下的还是一棵树,并且要求Σ(2^i)最大,i是剩下的节点的编号。

思路:

要使得剩下的点的2的幂的和最大,那么肯定要保住大的点,这是贪心。

考虑去掉哪些点的话,那么去掉一个点,它相连的子树的点肯定都得去掉,很麻烦。

所以放过来考虑保留哪些点,那么就从大到小考虑是否保留当前的点。并且把保留的点做标记。

首先n这个点是肯定可以保留的,标记,然后依次考虑n-1,n-2。。。1。

对于当前的点,判断是否已经被标记,如果没有被标记,那么就找到离当前点最远的没有被标记的祖先,如果要标记这个点,那么总共增加的点就是从当前点到离当前点最远的没有被标记的祖先的路径上的所有点的数量,也可以解释为当前点到已经保留的点所构成的树的路径上的点。

找这个路径的时候,暴力的话,n^2,肯定会T,所以可以首先用倍增预处理,再来找祖先,复杂度就可以下降为O(nlogn)。

如果这个数量没有超过要求,那么就把路径上的点全部标记。

最后没有标记的点就是要抛弃的点。

代码:

 #include <stdio.h>
#include <string.h>
#include <algorithm>
#include <vector>
using namespace std;
const int N = 1e6 + ;
int n,k;
vector<int> g[N];
int fa[N];
int dep[N];
bool vis[N];
int anc[N][];
void dfs(int u,int f)
{
fa[u] = f;
for (int v : g[u])
{
if (v != f)
{
dep[v] = dep[u] + ;
dfs(v,u);
}
}
}
void rdfs(int u,int f)
{
vis[u] = ;
if (u == f) return;
rdfs(fa[u],f);
}
void preprocess()
{
for (int i = ;i < n;i++)
{
anc[i][] = fa[i];
for (int j = ;(<<j) < n;j++) anc[i][j] = -;
}
for (int j = ;(<<j) < n;j++)
{
for (int i = ;i < n;i++)
{
if (anc[i][j-] != -)
{
int a = anc[i][j-];
anc[i][j] = anc[a][j-];
}
}
}
}
int main()
{
memset(anc,-,sizeof(anc));
scanf("%d%d",&n,&k);
k = n - k;
for (int i = ;i < n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
x--,y--;
g[x].push_back(y);
g[y].push_back(x);
}
dfs(n-,-);
preprocess();
int num = ;
vis[n-] = ;
for (int i = n - ;i >= ;i--)
{
if (vis[i]) continue;
int t = i;
for (int j = ;j >= ;j--)//j是从大到小枚举
{
if (anc[t][j] == -) continue;
else
{
if (!vis[anc[t][j]])
{
t = anc[t][j];
}
}
}
if (dep[i] - dep[t] + + num <= k)
{
num += dep[i] - dep[t] + ;
rdfs(i,t);
}
}
for (int i = ;i < n;i++)
{
if (!vis[i]) printf("%d ",i+);
}
return ;
}

codeforces 980E The Number Games的更多相关文章

  1. Codeforces 980E The Number Games 贪心 倍增表

    原文链接https://www.cnblogs.com/zhouzhendong/p/9074226.html 题目传送门 - Codeforces 980E 题意 $\rm Codeforces$ ...

  2. Codeforces 980E The Number Games - 贪心 - 树状数组

    题目传送门 传送点I 传送点II 传送点III 题目大意 给定一颗有$n$个点的树,$i$号点的权值是$2^{i}$要求删去$k$个点,使得剩下的点仍然连通,并且总权值和最大,问删去的所有点的编号. ...

  3. Codeforces 980 E. The Number Games

    \(>Codeforces \space 980 E. The Number Games<\) 题目大意 : 有一棵点数为 \(n\) 的数,第 \(i\) 个点的点权是 \(2^i\) ...

  4. Codeforces 55D Beautiful Number

    Codeforces 55D Beautiful Number a positive integer number is beautiful if and only if it is divisibl ...

  5. CF980E The Number Games

    CF980E The Number Games 给定一棵大小为 \(n\) 的树,第 \(i\) 个点的点权为 \(2^i\) ,删掉 \(k\) 个点及其连边,使得剩下的点组成一个连通块,且权值和最 ...

  6. CF980E The Number Games【树链剖分/线段树】

    CF980E The Number Games 题意翻译 Panel 国将举办名为数字游戏的年度表演.每个省派出一名选手. 国家有 n 个编号从 1 到 n 的省,每个省刚好有一条路径将其与其他省相连 ...

  7. The Number Games CodeForces - 980E (树, 贪心)

    链接 大意: 给定$n$节点树, 求删除$k$个节点, 使得删除后还为树, 且剩余点$\sum{2^i}$尽量大 维护一个集合$S$, 每次尽量添加最大的点即可 这样的话需要支持求点到集合的最短距离, ...

  8. Codeforces Round #480 (Div. 2) E - The Number Games

    题目大意:给你n个点的一棵树, 每个点的权值为2^i ,让你删掉k个点使得剩下的权值和最大. 思路:这题还是比较好想的, 我们反过来考虑, 剩下一个的情况肯定是选第n个点,剩下两个 我们肯定优先考虑第 ...

  9. codeforces Soldier and Number Game(dp+素数筛选)

    D. Soldier and Number Game time limit per test3 seconds memory limit per test256 megabytes inputstan ...

随机推荐

  1. 《linux 文本处理》- sed/awk

    一:sed 行文本处理 基本概念 sed 用于处理单行文本 sed 命令本身不会修改源文件,只是处理文件"流"的内容. 如果需要修改源文件,请使用 -i  或者 重定向 文件. 使 ...

  2. Xshell远程连接 与 Xftp文件传输

    刚开始接触Linux的时候,会想我该怎么在Windows连接到另一台Linux服务器,怎么把我Windows上的文件放到我Linux上面,网上搜索之后,知道可以用Xshell远程连接到Linux,用X ...

  3. mvn install package区别

    package是把jar打到本项目的target下,而install时把target下的jar安装到本地仓库,供其他项目使用

  4. Servlet----------ServletConfig

    1. 什么是 ServletConfig servletConfig对象:用于封装servlet的配置信息.从一个servlet被实例化后,对任何客户端在任何时候访问有效,但仅对servlet自身有效 ...

  5. Jenkins打包安卓时提示没同意constraintLayout的license的解决方法

    使用Jenkins打包安卓项目时,报错并失败,错误信息: You have not accepted the license agreements of the following SDK compo ...

  6. mysql 初识数据库 目录

    数据库管理软件的由来 数据库概述 MySQL介绍 Window版本 安装mysql linux 安装mysql yum方式 windows平台mysql密码设置 windows平台mysql密码破解设 ...

  7. Unity3D加密保护案例分享(一)

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎.通过u ...

  8. 表单样式form.css

    /**附件样式表.*/div.attachement{ float:left; overflow:hidden; padding:3px 0 0 15px; white-space:nowrap; } ...

  9. [OpenCV]代码整理

    开发环境:Windows7, VS2010, OpenCV2.4.10 1.图像特征匹配 // AxFeatureExtract.cpp : 定义控制台应用程序的入口点. // #include &q ...

  10. PHP 操作 Redis 的手册

    转:https://www.cnblogs.com/jackluo/p/5708024.html String 类型操作 string是redis最基本的类型,而且string类型是二进制安全的.意思 ...