题面

Panel 国将举办名为数字游戏的年度表演。每个省派出一名选手。

国家有 n 个编号从 1 到 n 的省,每个省刚好有一条路径将其与其他省相连。第 i 个省出来的代表有 2^i 名粉丝。

今年,主席打算削减开支,他想要踢掉 k 个选手。但是,被踢掉的选手的省将很 angry 并且不会让别的任何人从这个省经过。

主席想确保所有剩下选手的省都互相可达,他也希望最大化参与表演的选手的粉丝数。

主席该踢掉哪些选手呢?

升序输出要踢掉的选手编号。

因为是二进制表示权值,可知越大的数越要保留,因为所有比它小的数的和都比他要小

因此要贪心从n-1~1枚举是否可以保留(当然是以n为根的树,n号节点一定要保留)

#include <cstdio>
#include <vector>
#include <cctype>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 1000005
inline int read()
{
int s=,f=; char ch;ch=getchar();
while(!isdigit(ch)){f|=(ch=='-');ch=getchar();}
while(isdigit(ch)){s=s*+(ch-'');ch=getchar();}
return f?-s:s;
}
int n,m,k,in1[N],cnt=,fa[N][];
bool bo[N];
vector<int>G[N];
inline void dfs(int x,int pre)
{
fa[x][]=pre; int i; for(i=;i<=;i++)fa[x][i]=fa[fa[x][i-]][i-];
for(i=;i<(int)G[x].size();i++)if(G[x][i]!=pre)dfs(G[x][i],x);
}
inline int get(int x)
{
int i,re=;
for(i=;~i;i--)
{
if(!bo[fa[x][i]]){x=fa[x][i];re+=(<<i);}
}return re+;
}
#define r(n) n=read()
int main()
{
int i,x,y,j=; r(n);r(m);
for(i=;i<n;i++)
{
r(x);r(y);G[x].push_back(y);G[y].push_back(x);
}dfs(n,n); memset(bo,,sizeof bo);bo[n]=; k=n--m;
for(i=n-;i>=;i--)
{
if(bo[i])continue; int le=get(i),f;
if(le<=k)
{
f=i;k-=le;for(j=;j<=le;j++){bo[f]=;f=fa[f][];}
}
}
j=;for(i=;i<=n&&j<m;i++)if(!bo[i])printf("%d ",i),j++;printf("\n");
}

CF980E的更多相关文章

  1. CF980E The Number Games

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

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

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

  3. cf980E TheNumberGames (贪心+倍增)

    由于是$2^i$,所以一定要尽量留下来编号大的点 我们干脆就让n号点做树根,它是一定要留的 然后如果要留i的话,i一直到根的路径也都要留.所以只要判断一下够不够把这个路径上还没有留的都留下来 记录下已 ...

随机推荐

  1. 通过buildroot+qemu搭建ARM-Linux虚拟开发环境

    1. 配置工作环境 sudo apt install gcc build-essential bison flex gettext tcl sharutils libncurses-dev zlib1 ...

  2. 错误 103 未能加载文件或程序集“Telerik.Web.UI”或它的某一个依赖项。磁盘空间不足。 (异常来自 HRESULT:0x80070070)

    运行vs2010时出现错误: 错误 103 未能加载文件或程序集“Telerik.Web.UI”或它的某一个依赖项.磁盘空间不足. (异常来自 HRESULT:0x80070070) 处理方式:清理C ...

  3. 深入理解[Master-Worker模式]原理与技术

    Master-Worker模式是常用的并行模式之一.它的核心思想是,系统由两类进程协作工作:Master进程和Worker进程.Master进程负责接收和分配任务,Worker进程负责处理子任务.当各 ...

  4. 网络拓扑自动发掘之三层设备惯用的SNMP OID的含义

    原文地址:https://blog.csdn.net/maty_wang/article/details/81305070 1. ipNetToMediaIfIndex Name/OID: ipNet ...

  5. Centos7 下SVN迁移

    SVN迁移需要做如下操作: 1. 将原来的Repository导出 . #svnadmin dump 原有repos的目录路径 > dumpfile (不同服务器安装目录不同,根据具体情况调整) ...

  6. HDU 3478 Catch (连通性&&二分图判断)

    链接 [https://vjudge.net/contest/281085#problem/C] 题意 一个n个点,m条边的图,开始的点是s 每次必须移动到相邻的位置,问你是否存在某个时刻所有点都可能 ...

  7. c++入门之类继承初步

    继承是面向对象的一种很重要的特性,先来复习基类的基本知识: 先上一段代码: # ifndef TABLE00_H # define TABLE00_H # include "string&q ...

  8. Linux之常用软件-服务

    在使用Linux系统的时候,经常要使用一些功能,但是并不是系统自带的一些功能,这个时候就需要我们进行扩展安装一些软件. 1)telnet  检测telnet-server的rpm包是否安装 [root ...

  9. 学习笔记:filter_var()函数

    PHP 过滤器用于对来自非安全来源的数据(比如用户输入)进行验证和过滤 filter_var() 函数通过指定的过滤器过滤变量. 如果成功,则返回已过滤的数据,如果失败,则返回 false. 语法 f ...

  10. C# Note28: Dispatcher类

    在项目中也是经常用到: 刚见到它时,你会想:为什么不直接使用System.Windows命名空间下的MessageBox类,何必要这么麻烦?(认真分析看它做了什么,具体原因下面解释) 主要介绍的方法: ...