首页 > 其他分享 >20240724【省选】模拟

20240724【省选】模拟

时间:2024-07-24 17:50:33浏览次数:15  
标签:cnt 省选 siz ll int maxn 模拟 20240724 dp

挂了四分,掉了一名,不过这也说明我的实力就只有这点,根本不够,果然以后还是直接【数据删除】得了。

T1

其实就是个树剖,每个点维护左右子树的最大深度以及左右子树内的最大答案,然后就…………没了?

淦,也是实现问题,应该想到的。然后就是修改边权是改成 \(w-a_p\),\(a_i\) 是记录下来的 \(i\) 的父边边权。

真没了

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define ll int
#define ls now<<1
#define rs now<<1|1
const ll N=2*114514,M=1919810;
struct xx{
	ll next,to;
}e[2*N];
ll head[2*N],cnt;
void add(ll x,ll y){
	e[++cnt].next=head[x];
	e[cnt].to=y;
	head[x]=cnt;
}
ll n,m,fr[N];
ll in[N],out[N],t_cnt;
void dfs(ll u,ll fa){
	in[u]=out[u]=++t_cnt;
	for(int i=head[u];i;i=e[i].next){
		ll v=e[i].to;
		if(v==fa) continue;
		dfs(v,u);
		out[u]=++t_cnt;
	}
}
struct tree{
	ll res,tag;
	ll mx,mn,lmx,rmx;
}t[4*N];
void modify(ll now,ll k){
	t[now].mx+=k,t[now].mn+=k;
	t[now].lmx-=k,t[now].rmx-=k;
	t[now].tag+=k;
}
void pushup(ll now){
	t[now].mx=max(t[ls].mx,t[rs].mx),t[now].mn=min(t[ls].mn,t[rs].mn);
	t[now].lmx=max(max(t[ls].lmx,t[rs].lmx),t[ls].mx-2*t[rs].mn);
	t[now].rmx=max(max(t[ls].rmx,t[rs].rmx),t[rs].mx-2*t[ls].mn);
	t[now].res=max(t[ls].res,t[rs].res);
	t[now].res=max(t[now].res,max(t[ls].mx+t[rs].rmx,t[rs].mx+t[ls].lmx));
}
void pushdown(ll now){
	ll k=t[now].tag;
	if(!k) return;
	modify(ls,k),modify(rs,k);
	t[now].tag=0;
}
void build(ll now,ll l,ll r){
	if(l==r){
		t[now].lmx=t[now].rmx=t[now].res=-1;
		return;
	}
	ll mid=(l+r)>>1;
	build(ls,l,mid);
	build(rs,mid+1,r);
	pushup(now);
}
void update(ll now,ll l,ll r,ll x,ll y,ll k){
	if(l>=x&&r<=y){
		modify(now,k);
		return;
	}
	pushdown(now);
	ll mid=(l+r)>>1;
	if(x<=mid) update(ls,l,mid,x,y,k);
	if(y>mid) update(rs,mid+1,r,x,y,k);
	pushup(now);
}
ll p,w,a[N];
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	cin>>n>>m;
	for(int i=2;i<=n;++i){
		cin>>fr[i];
		add(i,fr[i]),add(fr[i],i);
	}
	build(1,1,n);
	dfs(1,0);
	for(int i=1;i<=m;++i){
		cin>>p>>w;
		update(1,1,t_cnt,in[p],out[p],w-a[p]);
		a[p]=w;
		cout<<t[1].res<<'\n';
	}
	return 0;
}/*5 4
1 1 2 2
4 8
4 3
2 2
5 7
拥有蒟蒻的力量,退役是必然的*/

T2

知道是个 dp,状态设出来了,推不出来,太菜了

设 \(dp[u][i][j][k]\) 表示在 \(u\) 的子树中选 \(u\) 并总共选了 \(i\) 个

标签:cnt,省选,siz,ll,int,maxn,模拟,20240724,dp
From: https://www.cnblogs.com/heshuwan/p/18321093

相关文章

  • Linux系统安装Cobol语言及IBM大型机模拟软件Hercules
     COBOL(CommonBusiness-OrientedLanguage)起源于50年代中期,是一种面向过程的高级程序设计语言,主要用于商业和数据处理领域。经过不断发展和标准化,已成为国际上应用最广泛的商业编程语言之一,在某red书上还有招聘COBOL程序员去日本的帖子,个人害怕噶腰子所以不推荐。COBOL语言具......
  • 学习pcie—20240724
    因为前一段时间看了xdma的IP核手册,发现只看xdma看不太懂,不清楚pcie的传输的流程,不了解报文格式,所以看看pcie手册,主要关注发送接收时序首先是pcieIP核与xdmaIP核的区别:IntegratedBlockforPCIExpress:7SeriesIntegratedBlockforPCIExpress是最基础的PCIeIP,实现的是......
  • SPONGE常用教程:蛋白+配体模拟1
    软件支持SPONGE(SimulationPackagetOwardNextGEnerationmolecularmodelling)是由北京大学高毅勤课题组开发的分子动力学模拟程序。安装教程XPONGE使用python编写的分子动力学模拟前后处理工具。简易安装:pipinstallgit+https://gitee.com/gao_hyp_xyj_admin/xponge.gitDS......
  • YC322A [ 20240724 CQYC NOIP 模拟赛 T3 ] 小 M 的字符串(string)
    题意给定一个\(0/1\)字符串,你需要从中选出尽可能多的不相交的子串使得按顺序字典序单调递增。\(n\le25000\)。Sol先考虑能最多选出多少个不相交的子串,这个是\(\frac{n}{\logn}\),但是这个没用。考察一下子串的长度,由于字典序的限制,最劣的情况下就是一个子串比上一个子串......
  • 『模拟赛』暑假集训CSP提高模拟6
    RankA.花间叔祖签到题,但没切。一眼出思路找最大公因数,过了大样例发现同余的情况也合法,然后开始优化,成功从68pts到了88pts。考虑正解,首先答案不是一就是二。若答案是一,即所有数可在模某数\(x\)意义下同余。不妨将每个数化成\(a_i=k\timesx+d\)的形式,则若存在一个......
  • 【数据结构】队列详解和模拟实现
    大家好,今天我们学习队列,本篇博客主要涉及一般队列,环形队列和双端队列,每个队列应用场景均有所差异,下面我们一起来看看吧。队列(Queue)一,概念队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出的特性入队列:进行插入操作的一端称为队尾(Ta......
  • 0207-pnet 模拟链路层数据
    环境Time2022-11-20WSL-Ubuntu22.04Rust1.65.0pnet0.31.0前言说明参考:https://docs.rs/pnet_datalink/0.31.0/pnet_datalink/dummy目标使用pnet_datalink包中的dummy模拟数据链路层的数据交换。Cargo.toml[package]edition="2021"name="network"versi......
  • 0208-模拟发送链路层数据
    环境Time2022-11-20WSL-Ubuntu22.04Rust1.65.0pnet0.31.0前言说明参考:https://docs.rs/pnet_datalink/0.31.0/pnet_datalink/dummy目标使用pnet_datalink包中的dummy模拟数据链路层发送一个数据包。网络接口letinterface=dummy::dummy_interface(44);创......
  • 0210-模拟发送构建的数据
    环境Time2022-11-20WSL-Ubuntu22.04Rust1.65.0pnet0.31.0前言说明参考:https://docs.rs/pnet_datalink/0.31.0/pnet_datalink/dummy目标使用pnet_datalink包中的dummy模拟数据链路层发送数据包。网络接口letinterface=dummy::dummy_interface(44);创建通......
  • 0209-模拟发送多个数据包
    环境Time2022-11-20WSL-Ubuntu22.04Rust1.65.0pnet0.31.0前言说明参考:https://docs.rs/pnet_datalink/0.31.0/pnet_datalink/dummy目标使用pnet_datalink包中的dummy模拟数据链路层发送多个数据包。网络接口letinterface=dummy::dummy_interface(44);创......