题面

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. face alignment[Ordinary Procrustes Analysis]

    人脸识别,大致可以分为以下四个步骤: 人脸检测:从图片中准确定位到人脸,并以矩形框将其裁剪出来: 人脸矫正(对齐): 检测到的人脸,可能角度不是很正,需要使其对齐,比如旋转,缩放: 特征提取:对矫正后 ...

  2. MongoDB非关系型数据库开发手册

    一:NoSql数据库 什么是NoSQL? NoSQL,指的是非关系型的数据库.NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称. NoSQL用于超 ...

  3. 并发连接MySQL

    先吐槽一下libmysqlclientAPI的设计, 多个线程同时去connect居然会core掉. 后来Google了一番, 才发现mysql_real_connect不是线程安全的, 需要一些额外 ...

  4. [LeetCode] Department Highest Salary -- 数据库知识(mysql)

    184. Department Highest Salary The Employee table holds all employees. Every employee has an Id, a s ...

  5. Python是如何进行内存管理

    三个方面:一对象的引用计数机制,二垃圾回收机制,三内存池机制 一.对象的引用计数机制 Python内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用计数. 引用计数增加的情况: 1,一个对象分 ...

  6. Day14 Python基础之os/sys/hashlib模块(十二)

    os模块 os.getcwd()  #获取当前工作路径 os.chdir(‘dirname1/dirname2/dirname3’) #改变当前脚本的工作路径,相当于cmd下的cd os.makedi ...

  7. [翻译]在asp.net core2.0 OpenID Connect Handler中丢失了声明(CLaims)?

    注:这是一篇翻译,来自这里.这篇文章讲述了在asp.net core2.0中使用openid connect handler的过程中解析不到你想要的claim时,你可以参考这篇文章. Missing ...

  8. mybatis事务管理机制详解

    1.mybatis事务的配置和使用 mybatis事务有两种使用方式: (a):使用JDBC的事务管理机制:即使用java.Sql.Connection对象完成对事务的提交,回滚和关闭操作. (b): ...

  9. Your branch is ahead of 'origin/master' by 2 commits.

    遇到这种问题,表示在你之前已经有2个commit而没有push到远程分支上,所以需要先git push origin **将本地分支提到远程仓库.也可以直接git reset --hard HEAD~ ...

  10. jquery 设置cookie、删除cookie、获取cookie

    1.引入jquery.js <script src="//cdn.bootcss.com/jquery/1.12.4/jquery.js"></script> ...