题面

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. Redis学习之SDS源码分析

    一.SDS的简单介绍 SDS:简单动态字符串(simple dynamic string) 1)SDS是Redis默认的字符表示,比如包含字符串值的键值对都是在底层由SDS实现的 2)SDS用来保存数 ...

  2. 唯一正确的修改Jupyter Notebook默认路径的方法

    唯一正确修改Jupyter Notebook的默认路径 1.按照网上的方法,先修改了快捷方式的起始位置,发现并不能修改默认路径. 2.后来发现“目标”中后面有个参数%USERPROFILE%,它代表的 ...

  3. CF741 D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths

    题目意思很清楚了吧,那么我们从重排回文串的性质入手. 很容易得出,只要所有字符出现的次数都为偶数,或者有且只有一个字符出现为奇数就满足要求了. 然后想到什么,Hash?大可不必,可以发现字符\(\in ...

  4. Centos 7 修改系统时区

    timedatectl status Local time: 四 2014-12-25 10:52:10 CST Universal time: 四 2014-12-25 02:52:10 UTC R ...

  5. python第四章:函数--小白博客

    Python函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可 ...

  6. Python中Socket粘包问题的解决

    服务器端 import socket import subprocess import struct server = socket.socket() ip_port = ("192.168 ...

  7. Python_迭代器-生成器-复习-习题_41

    # 迭代器和生成器# 迭代器 # 可迭代协议 —— 含有iter方法的都是可迭代的 # 迭代器协议 —— 含有next和iter的都是迭代器 # 特点 # 节省内存空间 # 方便逐个取值,一个迭代器只 ...

  8. elasticsearch判断索引是否存在

    一.判断索引是否存在 指定索引名,判断指定的索引是否存在集群中 /** * 判断指定的索引名是否存在 * @param indexName 索引名 * @return 存在:true; 不存在:fal ...

  9. echarts使用笔记一:基本属性

    1.包括一些基本的设置 app.title = '坐标轴刻度与标签对齐'; option = { title : { //标题 x : 'center', y : 5, text : '单通趋势图' ...

  10. Centos 6.x 升级到 7.x

    Centos6.5跨越大版本升级到Centos7.4 - Linux学习与应用 - CSDN博客https://blog.csdn.net/whbttst/article/details/805348 ...