YBTOJ:采矿战略(线段树维护dp、树链剖分)

文章目录

  • 题目描述
  • 解析
  • 代码

题目描述

在这里插入图片描述

所谓线段树维护dp,就是在线段树上维护dp

(逃)

解析

把树剖一下后就变成了区间问题
考虑建一棵线段树,每一个结点都是一个背包
这样就能区间查询,也能带修了
这种做法复杂度其实并不理想,是logn*dp合并复杂度
本题背包就是m2lognm^2lognm2logn
但是如果出题人想考这个肯定会在数据范围上放你一条生路啦
(调了半天结果树剖挂了就离谱)

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=2e4+100;
const int M=2e6+100;
const ll mod=1ll<<31;
ll read(){ll x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();};while(isdigit(c)){x=x*10+c-'0';c=getchar();};return x*f;
}
int n,m,A,B,Q;
struct edge{int to,nxt;
}p[N<<1];
int fi[N],cnt=-1;
void addline(int x,int y){p[++cnt]=(edge){y,fi[x]};fi[x]=cnt;
}
int fa[N],dfn[N],pos[N],low[N],top[N],tim,siz[N],hson[N];
void dfs1(int x,int f){fa[x]=f;siz[x]=1;for(int i=fi[x];~i;i=p[i].nxt){int to=p[i].to;if(to==f) continue;dfs1(to,x);siz[x]+=siz[to];if(!hson[x]||siz[hson[x]]<siz[to]) hson[x]=to;}return;
}
void dfs2(int x,int tp){top[x]=tp;dfn[++tim]=x;pos[x]=tim;if(hson[x]) dfs2(hson[x],tp);for(int i=fi[x];~i;i=p[i].nxt){int to=p[i].to;if(to==fa[x]||to==hson[x]) continue;dfs2(to,to);}
}
#define mid ((l+r)>>1)
#define ls (k<<1)
#define rs (k<<1|1)
int T[N][55];
struct bag{ll dp[55];ll mx[55];
}tr[N<<2];
void merge(bag a,bag b,bag &ans){memset(ans.dp,-0x3f,sizeof(ans.dp));memset(ans.mx,-0x3f,sizeof(ans.mx));ans.dp[0]=ans.mx[0]=0;for(int k=1;k<=m;k++){for(int i=0;i<=k;i++) ans.dp[k]=max(ans.dp[k],a.dp[i]+b.dp[k-i]);}for(int k=1;k<=m;k++){ans.mx[k]=max(a.mx[k],b.mx[k]);}return;
}
void build(int k,int l,int r){if(l==r){for(int i=1;i<=m;i++){tr[k].dp[i]=tr[k].mx[i]=T[dfn[l]][i];}return;}build(ls,l,mid);build(rs,mid+1,r);merge(tr[ls],tr[rs],tr[k]);
}
void change(int k,int l,int r,int x,bag o){if(l==r){tr[k]=o;return;}if(x<=mid) change(ls,l,mid,x,o);else change(rs,mid+1,r,x,o);merge(tr[ls],tr[rs],tr[k]);
}
bag ask(int k,int l,int r,int x,int y){
//	printf("k=%d l=%d r=%d x=%d y=%d\n",k,l,r,x,y);if(x<=l&&r<=y) return tr[k];if(y<=mid) return ask(ls,l,mid,x,y);else if(x>mid) return ask(rs,mid+1,r,x,y);bag o;merge(ask(ls,l,mid,x,y),ask(rs,mid+1,r,x,y),o);return o;
}
const int X=1<<16,Y=(1ll<<31)-1;
inline int getint(){A=((A^B)+B/X+B*X)&Y;B=((A^B)+A/X+A*X)&Y;return (A^B)%Q;
}
bag query(int x,int f){bag o;memset(o.dp,0,sizeof(o.dp));memset(o.mx,0,sizeof(o.mx));while(top[x]!=top[f]){merge(o,ask(1,1,n,pos[top[x]],pos[x]),o);x=fa[top[x]];}merge(o,ask(1,1,n,pos[f],pos[x]),o);return o;
}
int main(){//cout<<X<<" "<<Y;memset(fi,-1,sizeof(fi));cnt=-1;n=read();m=read();A=read();B=read();Q=read();for(int i=2;i<=n;i++){int x=read();addline(x,i);}dfs1(1,0);dfs2(1,1);
//	for(int i=1;i<=n;i++) printf("i=%d fa=%d pos=%d siz=%d hson=%d\n",i,fa[i],pos[i],siz[i],hson[i]);for(int i=1;i<=n;i++){for(int j=1;j<=m;j++) T[i][j]=getint();sort(T[i]+1,T[i]+1+m);}build(1,1,n);int q=read();for(int o=1;o<=q;o++){int f=read();if(f==0){int p=read();bag now;for(int i=1;i<=m;i++) now.dp[i]=getint();now.dp[0]=0;sort(now.dp+1,now.dp+1+m);for(int i=1;i<=m;i++) now.mx[i]=now.dp[i];change(1,1,n,pos[p],now);}else{int u=read(),v=read();bag ans=ask(1,1,n,pos[u],pos[u]+siz[u]-1);ll res=0;if(u==v) printf("%lld\n",ans.dp[m]);else{bag mx=query(fa[u],v);for(int i=m;i>=0;i--) ans.dp[m]=max(ans.dp[m],ans.dp[i]+mx.mx[m-i]);printf("%lld\n",ans.dp[m]);}}}return 0;
}
/*
*/

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

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

相关文章

【用皇宫三十六计生存法则带你走进LCT(动态树)】LCT概念+模板+例题【洛谷P3690 Link Cut Tree(动态树)】

文章目录LCT概念模板rotatoisrootsplayaccessmakerootsplitfindrootlinkcut封装版例题题目code普通版code封装版这篇博客主要是帮助大家理解各个模板及LCTLCTLCT的意思&#xff0c;方便理解&#xff0c;模板写法的理解在代码里有注释详解&#xff0c;如果要看原理的话&#xff…

迈向现代化的 .Net 配置指北

1. 欢呼 .NET Standard 时代我现在已不大提 .Net Core&#xff0c;对于我来说&#xff0c;未来的开发将是基于 .NET Standard&#xff0c;不仅仅是 面向未来 &#xff0c;也是 面向过去&#xff1b;不只是 .Net Core 可以享受便利&#xff0c; .NET Framework 不升级一样能享受…

YBTOJ洛谷P2042:维护数列(平衡树)

文章目录题目描述解析删除区间插入数列修改&翻转区间和&最大子段和代码传送门题目描述 解析 阴间题… 这不是裸的板子吗&#xff1f; 国赛真的有人能把这题写出来吗… 应该算一道练习作用很强的题了 写完这题&#xff0c;各种平衡树维护区间操作的方法可以说是毕业了吧…

CAP 2.4版本发布,支持版本隔离特性

前言自从上次 CAP 2.3 版本发布 以来&#xff0c;已经过去了几个月的时间&#xff0c;这几个月比较忙&#xff0c;所以也没有怎么写博客&#xff0c;趁着2019年到来之际&#xff08;现在应该是2019年开始的时候&#xff09;&#xff0c;CAP也发布了2018年的最后一个大版本 2.4&…

【周末狂欢赛7】【NOIP模拟赛】七夕祭,齿轮(dfs),天才黑客

文章目录T1题目题解codeT2题目题解codeT3题目题解codeT1 题目 七夕节因牛郎织女的传说而被扣上了「情人节」的帽子。于是TYVJ今年举办了一次线下七夕祭。Vani同学今年成功邀请到了cl同学陪他来共度七夕&#xff0c;于是他们决定去TYVJ七夕祭游玩。 TYVJ七夕祭和11区的夏祭的…

.NET Core 如何为项目提供高性能解决方案?

本系列&#xff0c;我们将探讨.NET Core 的一些好处&#xff0c;以及它如何为市场提供高性能解决方案&#xff0c;为传统.NET 开发人员和技术人员提供帮助。正文前言随着.NET Core 2.0 在 2016 年首次发布&#xff0c;微软拥有了这个通用、模块化、跨平台开源项目的下一个主要版…

[2.9训练]【CF909C】Python Indentation,【CF909D】Colorful Points,【CF909E】Coprocessor

文章目录T1&#xff1a;Python Indentation题目题解codeT2&#xff1a;Colorful Points题目题解codeT3&#xff1a;Coprocessor题目题解codeT1&#xff1a;Python Indentation 题目 题目描述 In Python, code blocks don’t have explicit begin/end or curly braces to mark…

Docker最全教程之使用Tencent Hub来完成CI(十)

本周更新两篇&#xff0c;保证不太监&#xff01;在本系列教程中&#xff0c;笔者希望将必要的知识点围绕理论、流程&#xff08;工作流程&#xff09;、方法、实践来进行讲解&#xff0c;而不是单纯的为讲解知识点而进行讲解。也就是说&#xff0c;笔者希望能够让大家将理论、…

[2.7]【CF933A】A Twisty Movement【CF926B】Add Points【CF917A】The Monster【CF919E】Congruence Equation

文章目录T1&#xff1a;A Twisty Movement题目题解codeT2&#xff1a;Add Points题目题解codeT3&#xff1a;The Monster题目题解codeT4&#xff1a;Congruence Equation题目题解codeT1&#xff1a;A Twisty Movement 题目 题目 题解 因为aia_iai​1/21/21/2&#xff0c;于…

LIS最长上升子序列

LIS算是比较经典的问题&#xff0c;常用的是O(n^2)的方法 for(int i1;i<n;i){dp[i]1;for(int j1;j<i;j){if(a[j]<a[i])dp[i]max(dp[i],dp[j]1);}mxmax(mx,dp[i]);}我们这里优化成O(nlogn) 我们模拟一个栈stack&#xff0c;每读入一个数&#xff0c;如果这个数大于栈顶…

EF Core 数据库 Provider 一览

当 EF Core 1.x 系列和 2.0 版本之间经过重大的重写时&#xff0c;所有 EF Core 数据库 Provider 都受到重创。从那时起&#xff0c;各种私人和商业开发团队一直在努力填补这个空白。正文当 EF Core 1.x 系列和 2.0 版本之间经过重大的重写时&#xff0c;所有 EF Core 数据库 P…

[3.3训练赛]One-Dimensional(矩阵快速幂),Freda的迷宫(无向图强连通分量+并查集),一道防AK好题

文章目录T1:One-DimensionaltitlesolutioncodeT2:【NOIP模拟赛】Freda的迷宫titlesolutioncodeT3:【NOIP模拟赛】一道防AK好题titlesolutioncode确实没想到自己写文章能隔这么久&#xff0c;鸽王预警 T1:One-Dimensional title 考虑一个含有 N 个细胞的一维细胞自动机。细胞…

牛客网专题 概率dp

文章目录概念&#xff1a;例题引入&#xff1a;解答&#xff1a;Happy Running NC15532题意&#xff1a;题解&#xff1a;代码&#xff1a;poj2096 NC106693 Collecting Bugs题意&#xff1a;题解&#xff1a;代码&#xff1a;NC210477 带富翁题意&#xff1a;题解&#xff1a;…

.NET Core 3.0 特性初探:C# 8、WPF、Windows Forms、EF Core

.NET Core 的下一个主要版本最近进入了预览阶段&#xff0c;.NET Core 3.0 将支持使用 Windows Presentation Foundation &#xff08;WPF&#xff09;、Windows Forms&#xff08;WinForms&#xff09;、Entity Framework &#xff08;EF&#xff09;、Blazor、 C# 8 和.NET S…

YBTOJ洛谷P4074:糖果公园(树上莫队)

文章目录解析update:代码所谓树上莫队&#xff0c;就是在树上的莫队 &#xff08;逃&#xff09; 传送门 解析 似乎就是树上的这道题 考虑如何转化为序列问题呢? 考虑dfs序 但是又一个问题。。。 似乎这条链的dfs序不连续啊 树剖一下就好啦 考虑更阳间的方法 求出这棵树的欧…

【用梨泰院class中的财阀世家带你洞悉替罪羊树】Scapegoat Tree原理,模板,例题

我想写在前面&#xff0c;本文财阀世家全是虚构&#xff0c;没有诋毁之意&#xff0c;如有雷同&#xff0c;纯属巧合 红色预警&#xff01;&#xff01;&#xff01;红色预警 文章目录Scapegoat Tree概念模板变量声明Bad函数判断是否需要重构理解模板rebuild重构理解模板inser…

领域驱动设计,让程序员心中有码(五)

1 从搬砖谈领域对象有一个古老的故事&#xff0c;大概是这样的。作者问三个建筑工地上的工人他们在干什么&#xff1f;有一个没精打采的说&#xff0c;我在挖洞&#xff01;而另一一个人却说&#xff0c;我在盖一座房子。还有一个人说&#xff0c;我在建立一座巨大的城市。…

.NET Core实战项目之CMS 第十四章 开发篇-防止跨站请求伪造(XSRF/CSRF)攻击处理...

通过 ASP.NET Core&#xff0c;开发者可轻松配置和管理其应用的安全性。 ASP.NET Core 中包含管理身份验证、授权、数据保护、SSL 强制、应用机密、请求防伪保护及 CORS 管理等等安全方面的处理。 通过这些安全功能&#xff0c;可以生成安全可靠的 ASP.NET Core 应用。而我们这…

模板:左偏树

文章目录解析可以解决的问题定义&#xff1a;左偏树的基本性质基本结论操作合并访问与删除堆顶元素插入元素批量插入删除已知元素所谓左偏树&#xff0c;就是往左偏的树 下面介绍一下它的一个兄弟&#xff1a; 《右偏树》 &#xff08;逃&#xff09; 解析 所谓左偏树&#…

迎开学水题狂欢赛(舞踏会[dp+三叉树],HH去散步[矩阵快速幂],排序[模拟],铁路旅行[线段树])

快速简单记录老师口胡&#xff08;可能就我自己看得懂了吧…&#xff09; 文章目录T1&#xff1a;舞踏会titlesolutioncodeT2&#xff1a;HH去散步titlesolutioncodeT3&#xff1a;排序titlesolutioncodeT4&#xff1a;铁路旅行titlesolutioncodeT1&#xff1a;舞踏会 title …