Company CodeForces - 1062E

http://codeforces.com/problemset/problem/1062/E

[l,r]内决定lca的肯定是dfs序最小和最大的两个点 因为一棵子树的dfs序是连续的 线段树维护一下每个点dfs序的最大次大和最小次小即可 看删最小合适还是删最大合适

比赛时水题切的太慢了 根本没看见这个题 菜的一批

 

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
const int N=0x3f3f3f3f;

struct node
{
    int v,next;
};

node edge[2*maxn];
int dp[maxn][20];
int maxx[4*maxn],idmax[4*maxn],minn[4*maxn],idmin[4*maxn];
int first[maxn],deep[maxn],mp[maxn];
int n,q,num;

void addedge(int u,int v)
{
    edge[num].v=v;
    edge[num].next=first[u];
    first[u]=num++;
}

void dfs(int cur,int fa)
{
    int i,v;
    mp[cur]=++num;
    for(i=first[cur];i!=-1;i=edge[i].next){
        v=edge[i].v;
        if(v!=fa){
            dp[v][0]=cur,deep[v]=deep[cur]+1;
            dfs(v,cur);
        }
    }
}

void solve()
{
    int i,j;
    dp[1][0]=0,deep[1]=0;
    dfs(1,0);
    for(j=1;(1<<j)<=n;j++){
        for(i=1;i<=n;i++){
            dp[i][j]=dp[dp[i][j-1]][j-1];
        }
    }
}

int getlca(int u,int v)
{
    int i;
    if(deep[u]<deep[v]) swap(u,v);
    for(i=log2(n);i>=0;i--){
        if(deep[dp[u][i]]>=deep[v]) u=dp[u][i];
    }
    if(u==v) return u;
    for(i=log2(n);i>=0;i--){
        if(dp[u][i]!=dp[v][i]) u=dp[u][i],v=dp[v][i];
    }
    return dp[u][0];
}

void pushup(int cur)
{
    if(maxx[2*cur]>maxx[2*cur+1]){
        maxx[cur]=maxx[2*cur];
        idmax[cur]=idmax[2*cur];
    }
    else{
        maxx[cur]=maxx[2*cur+1];
        idmax[cur]=idmax[2*cur+1];
    }
    if(minn[2*cur]<minn[2*cur+1]){
        minn[cur]=minn[2*cur];
        idmin[cur]=idmin[2*cur];
    }
    else{
        minn[cur]=minn[2*cur+1];
        idmin[cur]=idmin[2*cur+1];
    }
}

void build(int l,int r,int cur)
{
    int m;
    if(l==r){
        maxx[cur]=minn[cur]=mp[l];
        idmax[cur]=idmin[cur]=l;
        return;
    }
    m=(l+r)/2;
    build(l,m,2*cur);
    build(m+1,r,2*cur+1);
    pushup(cur);
}

void update(int tar,int val,int l,int r,int cur)
{
    int m;
    if(l==r){
        maxx[cur]=minn[cur]=val;
        return;
    }
    m=(l+r)/2;
    if(tar<=m) update(tar,val,l,m,2*cur);
    else update(tar,val,m+1,r,2*cur+1);
    pushup(cur);
}

void query(int tp,int &res,int &val,int pl,int pr,int l,int r,int cur)
{
    int m;
    if(pl<=l&&r<=pr){
        if(tp==0){
            if(val>minn[cur]){
                val=minn[cur];
                res=idmin[cur];
            }
        }
        else{
            if(val<maxx[cur]){
                val=maxx[cur];
                res=idmax[cur];
            }
        }
        return;
    }
    m=(l+r)/2;
    if(pl<=m) query(tp,res,val,pl,pr,l,m,2*cur);
    if(pr>m) query(tp,res,val,pl,pr,m+1,r,2*cur+1);
}

int main()
{
    int i,l,r,u,v,p,val,res,ans1,ans2;
    scanf("%d%d",&n,&q);
    memset(first,-1,sizeof(first));
    num=0;
    for(i=2;i<=n;i++){
        scanf("%d",&p);
        addedge(p,i),addedge(i,p);
    }
    num=0;
    solve();
    build(1,n,1);
    while(q--){
        scanf("%d%d",&l,&r);
        ans2=-1;

        val=N;
        query(0,u,val,l,r,1,n,1);//minn
        val=-N;
        query(1,p,val,l,r,1,n,1);
        update(p,-N,1,n,1);
        val=-N;
        query(1,v,val,l,r,1,n,1);//cmaxx
        update(p,mp[p],1,n,1);
        res=deep[getlca(u,v)];
        if(ans2<res){
            ans1=p,ans2=res;
        }

        val=-N;
        query(1,u,val,l,r,1,n,1);//maxx
        val=N;
        query(0,p,val,l,r,1,n,1);
        update(p,N,1,n,1);
        val=N;
        query(0,v,val,l,r,1,n,1);//cminn
        update(p,mp[p],1,n,1);
        res=deep[getlca(u,v)];
        if(ans2<res){
            ans1=p,ans2=res;
        }
        printf("%d %d\n",ans1,ans2);
    }
    return 0;
}

/*
6 2
1 2 1 2 4
2 3
1 4
*/

 

内容概要:本研究聚焦于绿电直连型电氢氨园区的优化运行,提出一种集成绿色电力直接供给、电解水制氢及氢气合成氨工艺的综合能源系统架构。通过建立包含风光发电、电解槽、氨合成反应器、储氢罐、电网交互及多类型负荷在内的系统模型,综合考虑绿电直供优先、能量梯级利用与多能互补原则,构建以系统综合运行成本最小化为目标的优化调度模型。研究采用Matlab与Python工具进行算法求解和仿真分析,利用实际气象与负荷数据完成案例验证,评估了不同运行策略下系统的经济性、可再生能源消纳能力与碳减排效益,为新型电氢氨一体化园区的规划与运行提供了理论依据和技术支撑。; 适合人群:具备一定电力系统、新能源或化工背景的研究生、科研人员及从事综合能源系统规划与优化工作的工程技术人员。; 使用场景及目标:①用于科研学习,理解电--氨多能转换系统的建模与优化方法;②为工业园区的低碳化、智能化改造提供技术参考与决策支持;③作为开发类似综合能源管理系统的理论基础。; 阅读建议:此资源包含完整的模型代码、数据与论文,使用者应结合代码仔细研读论文中的模型构建部分,重点关注目标函数与约束条件的设计逻辑,并尝试修改参数进行仿真,以深入掌握优化算法在实际系统中的应用。
内容概要:本文深入探讨了RS485通信协议在芯片行业自动化测试系统中的实际开发与应用,涵盖其关键概念、电气特性、通信机制及与Modbus RTU协议的结合使用。文章重点介绍了差分信号完整性设计、主从时序控制、CRC校验与重传机制等核心技术要点,并通过一个基于Python的完整代码实例,展示了如何实现RS485主站对探针台、自动分选机等芯片测试设备的控制与数据采集。此外,还分析了RS485在晶圆探针台、ATE设备集群和环境监控等典型场景的应用,并展望了其与工业以太网融合、智能化诊断、高速化及AI集成的发展趋势。; 适合人群:具备一定嵌入式系统或工业通信基础,从事芯片测试、自动化设备开发及相关领域的研发人员,尤其是工作1-3年希望提升现场总线应用能力的工程师。; 使用场景及目标:①理解RS485在高干扰芯片测试环境中稳定通信的设计原理;②掌握Modbus RTU协议在Python下的实现方法,用于实际控制探针台、Handler等设备;③构建可靠的数据采集与设备控制系统,支持CRC校验、异常处理和日志追踪;④为后续向高速通信和智能诊断系统升级提供技术储备。; 阅读建议:此资源强调实战开发,建议结合硬件环境动手调试代码,重点关注线程锁、CRC计算、帧解析和超时控制等关键环节,在真实产线中验证通信稳定性,并利用日志系统进行故障分析与优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值