luogu P3613 睡觉困难综合征

题目地址
做法和原题差不多原题地址
显然每一个节点开一个大小为K的数组储存答案肯定是不行的
但是 k k <=64,所以可以开一个unsignedlonglong储存答案
但是合并答案有点恶心
每个节点储存两个值 A A B A A 表示INF经过操作后的值, B B 表示0经过操作后的值
对于一个节点
首先 LA L A LB L B 为左边的答案, RA R A RB R B 为右边的答案
以A为例
对于每一位i
如果 LA L A 的第 i i 位为0那么A的第 i i 位的值为RA的第 i i
如果LA的第 i i 位为1那么A的第 i i 位的值为RB的第 i i

A=((notLA)andRA)or(LAandRB)

同理

B=((notLB)andRA)or(LBandRB) B = ( ( n o t L B ) a n d R A ) o r ( L B a n d R B )

那么这题就可以树链剖分或者LCT( 大常数树)
个人比较推荐树链剖分,因为LCT不仅难调而且还不好写并且常数还巨大
因为LCT有翻转操作所以还要维护 RevA R e v A RevB R e v B 表示反向操作的答案
总之能不写LCT就不写
ps:但是我还是写的LCT

#include <cstdio>
#include <cctype>
#include <cmath>
#include <algorithm>
#define File(S) freopen(S".in","r",stdin),freopen(S".out","w",stdout)
using namespace std;
namespace Data_stream{
    const int IN_LEN=1<<17;
    const int OUT_LEN=1<<17;
    char buf[IN_LEN],obuf[OUT_LEN],*pcur=obuf,*HEAD=buf,*TAIL=buf,ch;
    int BUF,PS=0,Buf[30];
    bool sign;
    inline char gec(){
        if(HEAD==TAIL){
            TAIL=(HEAD=buf)+fread(buf,1,IN_LEN,stdin);
            if(HEAD==TAIL)return EOF;
        }
        return *HEAD++;
    }
    inline void puc(char ch){
        if(pcur==obuf+OUT_LEN){
            fwrite(obuf,1,OUT_LEN,stdout);
            pcur=obuf;
        }
        *pcur++=ch;
    }
    template <typename T>
    inline int read(T&a){
        for(sign=0,ch=gec();!isdigit(ch)&&ch!=EOF;ch=gec())
            if(ch=='-')sign=1;
        if(ch==EOF)return EOF;
        for(a=0;isdigit(ch);ch=gec())a=((a+(a<<2))<<1)+(ch^'0');
        if(sign)a=-a;
        return 0;
    }
    template <typename T>
    inline void print(T x){
        if(x<0)puc('-'),x=-x;
        for(;x;x=BUF)
            BUF=x/10,Buf[++PS]=x-((BUF+(BUF<<2))<<1);
        while(PS)puc('0'^Buf[PS--]);
    }
    inline void flush(){
        fwrite(obuf,1,pcur-obuf,stdout);
    }
}
using namespace Data_stream;
#define Hf(x) (x->f?((x->f->s[0]==x)||(x->f->s[1]==x)):0)
#define Get(type) (type=(~type&s[1]->Fz)|(type&s[1]->Fe))
#define Get_(type) (type=(~type&s[0]->Rfz)|(type&s[0]->Rfe))
typedef unsigned long long Ul;
const int N=2e5+10;
const Ul INF=0xffffffffffffffff;//Max unsigned long long 
inline void Calc(Ul&v,const Ul&val,const int&opt){(!opt)?(v&=val):((opt&1)?(v|=val):(v^=val));}
struct Tree{
    Tree(int opt=0,Ul v=0):opt(opt),v(v){Fz=Fe=Rfz=Rfe=0;rev=0;s[0]=s[1]=f=0;} 
    int opt;
    Ul Fz,Fe,Rfz,Rfe,v;
    bool rev;
    Tree *s[2],*f;  
    inline void Push(){
        if(!rev)return;
        rev=0;swap(s[0],s[1]);
        swap(Fz,Rfz);swap(Fe,Rfe);
        if(s[0])s[0]->rev^=1;
        if(s[1])s[1]->rev^=1;
    }
    inline void Update(){
        if(s[0])Fz=s[0]->Fz,Fe=s[0]->Fe;
        else Fz=0,Fe=INF;
        Calc(Fz,v,opt);Calc(Fe,v,opt);
        if(s[1])Get(Fz),Get(Fe),Rfz=s[1]->Rfz,Rfe=s[1]->Rfe;
        else Rfz=0,Rfe=INF;
        Calc(Rfz,v,opt);Calc(Rfe,v,opt);
        if(s[0])Get_(Rfz),Get_(Rfe);
    }
    void*operator new(size_t);
}t[N],*cur=t,*vec[N],*stack[N];
inline void*Tree::operator new(size_t){return cur++;} 
int n,m,k,top;
inline void Rot(Tree *p){
    Tree *f=p->f;int v=(p!=f->s[0]);
    if(f->s[v]=p->s[v^1])f->s[v]->f=f;
    if(Hf(f))f->f->s[f!=f->f->s[0]]=p;
    p->f=f->f;p->s[v^1]=f;f->f=p;
    f->Update();p->Update();
} 
inline void Splay(Tree *p){
    Tree *last;
    stack[++top]=p->s[0];stack[++top]=p->s[1];
    for(last=p;Hf(p);p=p->f)stack[++top]=p->f->s[p==p->f->s[0]],stack[++top]=p;
    stack[++top]=p;
    for(;top;top--)if(stack[top])stack[top]->Push();
    for(p=last;Hf(p);Rot(p)){
        Tree *f=p->f;
        if(Hf(f)) Rot(((p!=f->s[0])^(f!=f->f->s[0]))?p:f);
    }
}
inline void Access(Tree *x){for(Tree *last=0;x;last=x,x=x->f){Splay(x);x->s[1]=last;x->Update();}} 
inline void MakeRoot(Tree *x){Access(x);Splay(x);x->rev^=1;}
inline void link(Tree*x,Tree*y){MakeRoot(x);x->f=y;}
inline void cut(Tree*x,Tree*y){MakeRoot(x);Access(y);Splay(x);x->s[1]=y->f=0;x->Update();}
int main()
{
    int x,y,type;
    Ul z;
    read(n);read(m);read(k);
    for(int i=1;i<=n;i++)read(t[i].opt),t[i].opt--,read(t[i].v),t[i].Update();
    for(int i=1;i<n;i++)read(x),read(y),link(t+x,t+y); 
    while(m--){
        read(type);read(x);read(y);read(z);
        if(type&1){
            MakeRoot(t+x);Access(t+y);Splay(t+y);
            Ul Fz=t[y].Fz,Fe=t[y].Fe,Ans=0;
            for(int i=k-1;~i;i--){
                Ul P=(Ul)1<<i; 
                if((Fe&P)&&!(Fz&P)&&(z>=P))Ans|=P,z-=P;
                else Ans|=Fz&P;
            }
            printf("%llu\n",Ans);
        }
        else{
            Splay(t+x);t[x].opt=y-1;t[x].v=z;
            t[x].Update();
        }
    }
    return 0;
}
内容概要:本文围绕“计及V2G主动支撑的光伏-储能-电动汽车输配协同日前优化调度”展开研究,提出了一种综合考虑光伏发电、储能系统与电动汽车(EV)在V2G(Vehicle-to-Grid)模式下协同参与电网调度的优化模型。通过Matlab代码实现,构建了日前优化调度框架,充分挖掘电动汽车作为移动储能单元的潜力,利用其双向充放电能力为主动配电网提供调峰、填谷和备用等主动支撑服务。研究综合考虑了可再生能源出力不确定性、负荷需求波动以及电动汽车出行行为特征,建立了多主体、多目标的协同优化机制,旨在降低系统运行成本、提高新能源消纳水平,并增强电网运行的稳定性与可靠性。该资源属于电力系统与综合能源系统领域的高水平科研复现资料,具备较强的理论深度与工程应用价值; 适合人群:具备电力系统分析、优化建模基础及Matlab编程能力的研究生、科研人员,以及从事智能电网、能源互联网、综合能源系统等相关领域技术研发的专业技术人员; 使用场景及目标:①用于学习和复现源-网-荷-储协同优化调度的核心建模方法与求解流程;②掌握V2G技术在电网调频调峰中的数学建模方法及其在优化调度中的集成应用;③支撑光伏、储能与电动汽车耦合系统的低碳经济调度、鲁棒优化或分布鲁棒优化等前沿课题的研究与仿真验证; 阅读建议:建议结合文中提供的Matlab代码与主流优化工具箱(如YALMIP、CPLEX、Gurobi等)进行实践操作,重点理解目标函数设计、约束条件构建及多变量耦合关系的处理策略,同时可进一步拓展至日内滚动优化、实时调度或多时间尺度协调优化方向开展深入研究。
内容概要:本文提出了一种基于改进自适应完备集合经验模态分解(Improved Adaptive Complete Ensemble Empirical Mode Decomposition, ICEEMDAN)的混合储能辅助火电机组调频协同控制策略,并提供了完整的Matlab代码实现。该策略利用ICEEMDAN对电网频率波动信号进行高精度自适应分解,提取不同时间尺度下的功率分量,进而合理分配火电机组与混合储能系统(如蓄电池、飞轮等)的调频任务,充分发挥各自响应速度快慢互补的优势。通过引入优化算法对功率分配系数进行动态整定,实现了调频过程中储能系统的高效协同运行,有效抑制了功率波动,提升了系统频率调节的快速性、稳定性和调节精度,同时延长了储能设备的使用寿命。文中详细阐述了算法原理、模型构建、控制逻辑设计及仿真验证过程,具有较强的可复现性与工程应用价值。; 适合人群:具备电力系统自动化、新能源并网控制或智能优化算法等相关专业知识背景,熟悉Matlab/Simulink仿真平台的技术人员,特别适用于从事电网调频、储能系统控制、信号处理在电力系统中应用等方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入研究混合储能系统在提升传统火电机组调频性能中的作用机制;②掌握ICEEMDAN等先进非平稳信号处理方法在功率动态分解中的具体实现与参数调优;③构建火电机组-储能协同调频仿真模型,开展多工况对比分析以优化控制性能;④为相关学术论文复现、科研项目申报或实际工程方案设计提供可靠的技术参考与代码支持。; 阅读建议:建议结合Matlab代码逐模块阅读文档内容,重点关注ICEEMDAN的实现流程、IMF分量筛选规则、功率分配权重计算逻辑及整体控制架构的设计思路。读者可通过调整信号噪声水平、滤波参数、储能容量配置等变量进行仿真实验,对比不同策略下的调频效果,从而深化对协同控制机理的理解,并可进一步拓展至风光火储联合系统或多时间尺度协调控制的研究场景。
内容概要:本文围绕《【顶级EI完整复现】【DRCC】考虑N-1准则的分布鲁棒机会约束低碳经济调度(Matlab代码实现)》展开,系统介绍了一种融合分布鲁棒优化(DRO)与机会约束规划(CCP)的低碳经济调度模型,并引入电力系统N-1安全准则以增强调度方案在设备故障等异常工况下的可靠性。该研究针对新能源出力波动、负荷不确定性等实际挑战,构建了兼具环保性与经济性的优化调度框架,通过Matlab实现了完整的数学建模、算法求解与仿真验证流程,属于高水平学术成果的工程化复现,具有较强的理论深度与实践价值。; 适合人群:具备电力系统分析、优化建模基础及Matlab编程能力,从事能源系统调度、低碳技术、智能电网等领域研究的研究生、科研人员及工程技术人员(建议工作年限1-5年)。; 使用场景及目标:① 学习并复现顶级EI期刊中低碳经济调度的先进建模范式;② 掌握分布鲁棒优化与机会约束在处理不确定性问题中的建模技巧;③ 理解N-1安全准则在优化模型中的集成方法与工程意义;④ 利用所提供的Matlab代码进行算法验证、参数调试或拓展至微电网、综合能源系统等应用场景。; 阅读建议:建议结合相关优化理论文献与原始论文对照学习,重点剖析模型构建的数学逻辑与物理含义,动手运行代码并尝试修改约束条件、调整不确定性参数或替换测试系统,以深化对算法性能与调度策略的理解,提升解决复杂电力系统优化问题的实战能力。
源码直接下载地址: https://pan.quark.cn/s/a4b39357ea24 标题中的“mac驱动兼容win11系统驱动适配版本bootcamp_5.1.5640”明确指出这是一个面向苹果Mac电脑用户的产品,其核心目的是协助用户在Windows 11操作系统上完成驱动程序的安装与配置工作。BootCamp作为苹果公司推出的一项工具,赋予Mac用户在不移除原有macOS系统的前提下,安装并执行Windows操作系统的能力。此特定版本的BootCamp 5.1.5640是专门针对Windows 11环境进行优化的驱动适配版本。 描述部分提及的“mac装win11适配的驱动包”,表明这个压缩文件内含了适配Mac硬件在Windows 11操作系统下运行的驱动程序,涵盖显卡、声卡、网卡等关键设备。用户需首先对文件进行解压缩操作,随后在BootCamp文件夹中找到名为"BootCamp.msi"的安装文件,通过双击执行来启动安装流程。这一步骤是BootCamp驱动安装过程中的核心环节,其中msi文件代表Microsoft Installer格式,其功能在于应用程序的分发与管理。 “BootCamp”标签进一步验证了该压缩包的主要功能,即借助BootCamp服务实现Mac设备与Windows系统之间的硬件兼容性。BootCamp的功能不止于提供驱动程序,还集成了一个引导管理器,允许用户在系统启动时选择运行macOS或Windows。 在压缩包的文件清单中: 1. "AutoUnattend.xml":该文件通常作为无人值守安装的配置文档,旨在自动执行Windows安装过程中的部分或全部设置任务,如用户账户的建立、地区设定的调整、网络配置等,从而提升安装的便捷性。 ...
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值