cf980E TheNumberGames (贪心+倍增)
由于是$2^i$,所以一定要尽量留下来编号大的点
我们干脆就让n号点做树根,它是一定要留的
然后如果要留i的话,i一直到根的路径也都要留。所以只要判断一下够不够把这个路径上还没有留的都留下来
记录下已经留下来的点,然后倍增来找就可以了
然后如果可以的话,可以一个一个往上跳地修改,反正每个点只能被留下来一次,只要跳到了已经留过的点直接结束就行了
1 #include<bits/stdc++.h> 2 #define pa pair<int,int> 3 #define CLR(a,x) memset(a,x,sizeof(a)) 4 using namespace std; 5 typedef long long ll; 6 const int maxn=1e6+10; 7 8 inline ll rd(){ 9 ll x=0;char c=getchar();int neg=1; 10 while(c<'0'||c>'9'){if(c=='-') neg=-1;c=getchar();} 11 while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar(); 12 return x*neg; 13 } 14 15 int eg[maxn*2][2],egh[maxn],ect; 16 int fa[maxn][21],dep[maxn]; 17 int N,K; 18 bool flag[maxn]; 19 20 inline void adeg(int a,int b){ 21 eg[++ect][0]=b;eg[ect][1]=egh[a];egh[a]=ect; 22 } 23 24 void dfs(int x){ 25 for(int i=0;fa[x][i]&&fa[fa[x][i]][i];i++) 26 fa[x][i+1]=fa[fa[x][i]][i]; 27 for(int i=egh[x];i;i=eg[i][1]){ 28 int b=eg[i][0];if(b==fa[x][0]) continue; 29 fa[b][0]=x; 30 dep[b]=dep[x]+1;dfs(b); 31 } 32 } 33 34 int main(){ 35 //freopen("","r",stdin); 36 int i; 37 N=rd(),K=rd(); 38 for(i=1;i<N;i++){ 39 int a=rd(),b=rd(); 40 adeg(a,b);adeg(b,a); 41 } 42 dep[N]=1;dfs(N); 43 K=N-K-1; 44 flag[N]=1; 45 for(i=N-1;i;i--){ 46 int x=i,n=0; 47 if(flag[i]) continue; 48 for(int j=log2(dep[x]);j>=0;j--){ 49 if(fa[x][j]&&!flag[fa[x][j]]) 50 n+=1<<j,x=fa[x][j]; 51 }n++; 52 if(n<=K){ 53 K-=n; 54 int x=i; 55 while(!flag[x]) flag[x]=1,x=fa[x][0]; 56 } 57 } 58 for(i=1;i<=N;i++) if(!flag[i]) printf("%d ",i); 59 return 0; 60 }
转载于:https://www.cnblogs.com/Ressed/p/9758878.html
cf980E TheNumberGames (贪心+倍增)相关推荐
- BZOJ.1178.[APIO2009]会议中心(贪心 倍增)
BZOJ 洛谷 \(Description\) 给定\(n\)个区间\([L_i,R_i]\),要选出尽量多的区间,并满足它们互不相交.求最多能选出多少个的区间以及字典序最小的方案. \(n\leq2 ...
- HDU 4343 贪心+倍增
Problem DescriptionThis is a very simple question. There are N intervals in number axis, and M queri ...
- hdu4343 Interval query【贪心+倍增】
题目大意: 给定n个数轴上特殊的开区间(l,r),m次询问,每次询问(a,b)之间最多有多少个不相交的特殊区间.(1<=n,m<=100000,0<=l,r,a,b<=1000 ...
- LOJ6435【PKUSC2018】星际穿越题解(贪心+倍增)
题目:LOJ6435. 题目大意:给定一张无向图 n n n个点,表示现在又知道了一些信息为每个点 i i i与编号为 [ l i , i − 1 ] [l_i,i-1] [li,i−1]的点有连边 ...
- CF1088F Ehab and a weird weight formula(树上最优性问题、贪心+倍增)
Description 给出一棵 n 个结点的树,点 i 有正权值 wiw_iwi,wiw_iwi 互不相同. 除了权值最小的点,保证每个点 u 都有一个邻点 v 使得 wvw_vwv < ...
- THUWC 2018(游记)
这次是在雅礼洋湖中学举行的,一所2017年才创办的学校,新的学校, 貌似有些危险,积雪过多屋顶上的冰块砸下来,很容易砸到人, 听说最近就有一个人被砸死了. Day1 昨天睡的比较迟,12点吧,今天早上 ...
- 其他算法和思想的题目
文章目录 代码 排序 位运算 枚举 前缀和差分 二分 贪心 倍增 代码 排序 题目 题意 思路 代码 奇数码问题 给定两个奇数码局面,判断是否可达. 将两个数码写成序列,求逆序对看奇偶性是否相同. 1 ...
- gdkoi2018thuwc2018wc2018游记
emmmmmmm不知道写啥好 不如什么都不写就这样吧 1月25去广州gdkoi滚粗后跑去thuwc继续滚大粗接着wc碎了几天觉接着gg想想到今天回到家已经半个月了呢,干脆几篇游记一起写了吧 1.25下 ...
- 在mysql中通配符_mysql查询中通配符的使用
mysql查询中通配符的使用 在mysql查询中经常会使用通配符,并且mysql的通配符和pgsql的存在区别(稍候再讨论),而且mysql中还可以使用正则表达式. SQL模式匹配: "_& ...
- Masonry 布局tag标签(4343排列)
广告 欢迎大家一起交流 QQ群 139852091 公众号 我是jpg 效果 image.png demo // TagAppDto dto; // List<TagAppDto> dto ...
最新文章
- javascript十六进制数字和ASCII字符之间转换
- Bytom BIP-32协议和BIP-44协议解读
- Angular 7 版本
- module ‘mxnet.symbol‘ has no attribute ‘LSoftmax‘
- python电脑发音-Python如何实现文本转语音
- SpringBoot_02 Spring的Java配置方式
- Mapper 接口无法注入或Invalid bound statement (not found)
- python123系统基本信息获取_Python运维-获取当前操作系统的各种信息
- ASP.NET RouteModule相关的一些东西
- (转载)Dig命令的用法
- idea中maven下载依赖包出错
- 带你了解强大的Cadence家族,你可能只用到了它1/10的工具
- GBK内码字符串转Unicode字符串
- 用ssms建sql server数据库和python连接到数据库
- android面试题2022
- Error: Incorrect contents fetched, please reload.
- 移动云Mas发送普通短信和模板短信
- 波士顿房价预测(终版讲解)
- rk3288 Android 8,RK3288W Android8.1开发日志(一)
- 构造函数c语言引用,c – 定义的构造函数的“未定义引用”