暑假模拟7

news/2024/9/8 12:19:38/文章来源:https://www.cnblogs.com/abnormal123/p/18327523

暑假模拟7

Permutations & Primes

比较简单的构造题,容易发现所选区间只有包含1才可能产生贡献,此时考虑将2,3放在两边,1放在中间,其他数字不重要。构造方法正确性显然。注意 \(n=1,2\) 的情况。

树上游戏

Description

这一天,\(Delov\) 在和他的 \(npy\) 们在树上做游戏,他的 \(npy\) 们喜欢不同的位置,所以每个树节点上都有他的 \(npy\),她们都希望 \(Delov\) 离自己近一些,否则就会不高兴。具体来讲,\(Delov\) 所在节点离某个 \(npy\) 所在节点的树上路径长度即为该节点 \(npy\) 的不满意度。
\(Delov\) 希望能够让所有 \(npy\) 的不满意度的最大值最小,而且,作为时间管理大师, \(Delov\) 拥有分身术,也就是说,他能同时存在于 \(k\) 个节点,对 \(npy\) 来说她们会以离自己最近的 \(Delov\) 计算不满意度。

\(Delov\) 想知道所有 \(npy\) 的不满意度的最大值的最小值是多少,并把问题抛给你。

分析

赛时狂调不止,心态炸裂,还没调完,最后一秒没交上。

二分答案的做法比较好想。检验一个答案是否合法,考虑一种贪心的想法,从叶子节点开始,每个 \(Delov\) 尽可能靠上放置,但要保证最远距离不超过二分的答案,最后统计最少需要多少 \(Delov\) 即可。(代码实现细节有点多)我们记 \(maxn_u\) 为在 \(u\) 的子树中,不在 \(Delov\) 覆盖范围内的节点与 \(u\) 的最大距离, \(minn_u\) 为在 \(u\) 的子树中,\(Delov\)\(u\) 的最小距离,\(DFS\) 进行转移。注意一些问题,例如判断子树内是否有 \(Delov\) ,当遍历到根节点时,注意判断距离,等等。其实是我不记得了

Code

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+100;
int n,m,cnt,head[N],a,b,num;
struct edge{int to,nxt;
}e[N<<1];
int depth[N],son[N];
bool last[N],pd[N];
int maxn[N],minn[N];
void add(int u,int v){cnt++;e[cnt].to=v;e[cnt].nxt=head[u];head[u]=cnt;
}
void dfs1(int u,int f){depth[u]=depth[f]+1;for(int i=head[u];i;i=e[i].nxt){int v=e[i].to;if(v==f)continue;dfs1(v,u);son[u]++;}
}
void dfs(int u,int f,int k){for(int i=head[u];i;i=e[i].nxt){int v=e[i].to;if(v==f)continue;dfs(v,u,k);minn[u]=min(minn[u],minn[v]+1);}for(int i=head[u];i;i=e[i].nxt){int v=e[i].to;if(v==f)continue;if(maxn[v]+minn[u]+1>k){if(maxn[v]+1>=k){num++;minn[u]=0;maxn[u]=-1;return ;}}if(u==1&&minn[u]+maxn[u]>k){num++;return ;}if(maxn[v]+minn[u]+1>k){maxn[u]=max(maxn[u],maxn[v]+1);}else if(maxn[v]==-1){maxn[u]=max(maxn[u],0);}}if(maxn[u]==0&&minn[u]<=k)maxn[u]=-1;if(u==1&&minn[u]+maxn[u]>k){num++;return ;}
}
bool check(int x){num=0;memset(maxn,0,sizeof(maxn));memset(minn,0x3f,sizeof(minn));dfs(1,1,x);if(num<=m)return 1;else return 0;
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<n;i++){scanf("%d%d",&a,&b);add(a,b);add(b,a);}dfs1(1,1);int l=1,r=n-1;while(l<r){int mid=(l+r)>>1;if(check(mid))r=mid;else l=mid+1;}cout<<l<<endl;
}

剩下部分先省略。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/772792.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 实现行为驱动开发 (BDD) 自动化测试详解

​在当今的软件开发领域,行为驱动开发(Behavior Driven Development,BDD)作为一种新兴的测试方法,逐渐受到越来越多开发者的关注和青睐。Python作为一门功能强大且易于使用的编程语言,在实现BDD方面也有着独特的优势。那么,如何利用Python实现BDD自动化测试呢?本文将为…

Fenwick Tree

看这篇题解 解释一下是为什么 看蓝书的图,比如\(a_3\)对\(c_8\)的贡献,操作一次,贡献系数为\(1\),然后将\(a_8\)中\(a_3\)的贡献次数改为\(1\),考虑一下操作第二次在干什么,我们是先更新了\(a_3\)对\(c_4\)的贡献,然后让\(c_8\)为\(c_4\)和\(a_8\)(注意这里的\(a_8\)已…

04HTML+CSS

今天开始学了CSS,CSS叫做-层叠样式表。主要是来美化界面的。今日学习内容有 1.CSS的引入方式,CSS的引入方式有三种 内部样式表:学习使用 CSS 代码写在 style 标签里面 l 外部样式表:开发使用 l CSS 代码写在单独的 CSS 文件中(.css)在 HTML 使用 link 标签引入 ,在.CSS文…

ssy中学暑假集训向量学习笔记(完结)

今天模拟赛T4是个极其恶心的东西,用到了许多高中数学知识,md,先引入前置知识。 复数 定义虚数单位\(i\) 满足\(i^2=-1\),复数域\(C\),形如\(a+bi,(a,b\in \mathbb{R})\)的数叫做复数。 复数\(a+bi\)可以在坐标系中表示为\((a,b)\)的向量。 同时复数的加减法满足向量的加减法…

ssy中学暑假集训向量学习笔记(应该能完结)

今天模拟赛T4是个极其恶心的东西,用到了许多高中数学知识,md,引入前置知识。 向量 定义 顾名思义,向量就是有方向的量,在平面直角坐标系上可以用\((a,b)\)表示,图如下:图像上即为由\(A\)指向\(B\)的一条向量。 投影 投影不好解释,拿图吧。\(AC\)在\(AB\)上的投影就是\(…

2023.7.2-3-4Mssql xp_cmdshell提权

1.概念 Mssql和SQL sever的一个产品的不同名称。都属于微软公司旗下。而上述Mssql xp_cmdshell提权也属于数据库提权的一种。 主要依赖于sql server自带的存储过程。 1.1xp_cmdshell提权 扩展存储过程中xp_cmdshell是一个开放接口,可以让sql sever调用cmd命令。 此过程在 SQL …

第二次测试部分题解 (c,d,g)

c-一个欧拉函数模板题1 #include<iostream>2 using namespace std;3 4 int main()5 {6 int n;7 cin >> n;8 int r = n;9 for (int i = 2; i * i <= n; i++) 10 { 11 if (n % i == 0) 12 { 13 r = r / i * (i -…

[随笔]我的创作纪念日

今天,是我开始创作的第256天,哈哈...这刚好是8位无符号二进制的“模”,一个“轮回”。 一些心得和感悟、一些历程与经历、一些收获与体会,大家感兴趣可以看看。历程 我最开始接触这个平台大约是在2020年10月份的时候,那时我正直大三上期,我已经开始备研。附言:黎老师(我…

搭建极狐GitLab(基于Docker): 步骤整合汇总记录

执行背景: (1) CentOS7(虚拟机ISO映像文件=CentOS-7-x86_64-DVD-2009.iso); (2) repo(yum)源已切换为国内源;命令汇总:1. 安装Docker 相关命令: # 查看仓库源中可使用版本 yum list docker-ce --showduplicates | sort -r# 安装指定版本 yum install docker-ce-docker完整版本号…

【待做】【攻防技术系列+权限提升】Windows提权

Windows提权思维导图Windows提权工具 vulmap vulmon开发的一款开源工具,原理是根据软件的名称和版本号来确定,是否有CVE及公开的EXP。这款Linux的工具挺好用,但是对于Windows系统层面不太适用。 windows-exp-suggester 这款和本工具的原理一样,尝试使用了之后,发现它的CVE…

[随笔]创作4天的心得感悟

随笔。【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://www.cnblogs.com/cnb-yuchen/p/18327364 出自【进步*于辰的博客】今天,3月14日,和往常一样,也不是什么节日,就是看到博友们发的动态,也有所感慨。 算一算,我接触此平台已经327天了。虽…

【待做】【攻防技术系列+网络协议】ICMP协议

ICMP协议简介 ICMP(Internet Control Message Protocol)因特网控制报文协议。它是IPv4协议族中的一个子协议,用于IP主机、路由器之间传递控制消息。控制消息是在网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然不传输用户数据,但是对于用户数据…