首页 > 其他分享 >牛客挑战赛71 B树上博弈

牛客挑战赛71 B树上博弈

时间:2023-12-11 21:45:20浏览次数:39  
标签:head dp2 int long 牛客 edge 71 挑战赛 dp

Link

一道很有意思的min-max博弈

用树上dp来解决,那么显然的,当前节点是谁取的会影响答案,\(dp2_{i,j}\)表示取当前阶段,被Alice/Bob取走的结果,
并且这个题是取子树上任意的节点,那么还需要保存子树上的信息,故使用\(dp_{i,j}\)记录下子树中的Alice/Bob取走的结果,然后就可以顺着dp解决这个问题了。


#include<iostream>
#include<cstdio>
using namespace std;
int ans[200005];
int t;
long long c[200005];
int head[200005];
struct ed{
    int to;
    int ne;
}edge[200005];
int p;
void add(int f,int to){
    edge[++p].to=to;
    edge[p].ne=head[f];
    head[f]=p;
    return ;
}
int f;
long long dp[200001][2];
long long dp2[200001][2];
//k等于0表示bob来取
void dfs(int f){
    if(!head[f]){
        dp[f][0]=dp2[f][0]=-c[f];
        dp[f][1]=dp2[f][1]=c[f];
        return ;
    }
    dp[f][0]=dp2[f][0]=1e13;
    dp[f][1]=dp2[f][1]=-1e13;
    for(int i=head[f];i;i=edge[i].ne){
        int to=edge[i].to;
        dfs(to);
        dp[f][0]=min(dp[to][0],dp[f][0]);
        dp[f][1]=max(dp[f][1],dp[to][1]);
    }
    dp2[f][0]=dp[f][1]-c[f];
    dp2[f][1]=dp[f][0]+c[f];
    dp[f][0]=min(dp2[f][0],dp[f][0]);
    dp[f][1]=max(dp[f][1],dp2[f][1]);
    return ;
}
int n;
int main(){
    scanf("%d",&t);
    while(t--){
        p=0;
        scanf("%d",&n);
        for(int i=1;i<=n;++i){
            head[i]=0;
        }
        for(int i=2;i<=n;++i){
            scanf("%lld",&c[i]);
        }
        for(int i=2;i<=n;++i){
            scanf("%d",&f);
            add(f,i);
        }
        dfs(1);
        printf("%lld\n",dp[1][1]);
    }
    return 0;
}

标签:head,dp2,int,long,牛客,edge,71,挑战赛,dp
From: https://www.cnblogs.com/For-Miku/p/17895633.html

相关文章

  • AR9271无线网卡Win10配置热点
    AR9271无线网卡Win10配置热点需要的无线网卡如下图1准备工作网卡参数AtherosAR9271是一款高性能的无网络模块,采用802.11b/g/n标准,支持2.4GH频段。它被广泛应用于路由器、网络摄像头物联网设备等领域,具有以下主要特征:1.高性能:AtherosAR9271采用优秀的无线芯片,支持最高......
  • Intel710驱动代码分析-客户端的通知回掉函数
    继续分析710的驱动代码:今天主要分析这个代码:客户端通知函数作用今天要分析的是一个客户端通知函数,该函数i40e_notify_client_of_vf_enable的作用是:在PF上启用或禁用VF后,通过客户端的回调函数通知客户端。传入参数structi40e_pf*pf(表示PF(PhysicalFunction,物理功能)设备信息)u3......
  • Intel710驱动代码分析-i40e_probe
    前言在710的这个专栏里,我上篇文章中主要分析了驱动代码中的注册函数以及注册所需的结构体,其中有很多内容,今天我们围绕i40e_probe这个探测函数进行分析,由于研究原因以及时间原因,对这个驱动代码的分析,还是紧紧围绕虚拟化这个部分来分析,也就是VF。代码在github上有共享链接在这:i40e大......
  • 最强无缓存PCIe 4.0 SSD之一!长江存储致态TiPlus7100 4TB评测:满盘写入缓外2.3GB/s
    一、前言:长江存储首款自有品牌致态4TBSSD其实早在年初,就有不少搭载长江存储闪存颗粒的国产4TBSSD,不过长江存储的自有品牌致态,直到现在才推出这款致态TiPlus71004TB。当然有句话叫好货不怕晚,致态TiPlus71004TB是一款非常优秀的PCIe4.0SSD。致态TiPlus71004TB采用了长江......
  • 2023 牛客多校 8 E
    神仙题。题意计数长度为\(n\),满足以下条件的序列\(a\)个数\(\bmod998244353\):\(L\lea_i\leR\)。\(S_1(\suma_i)\equivS_2(\suma_i)\pmodm\)。其中\(S_1(x)\)表示\(x\)的各个数位的和,\(S_2(x)\)表示各个数位平方和(十进制下)。数据范围:\(1\len,m\le20,1\l......
  • 21207119-第三次java博客
    前言第三次博客,主要是成绩系统和期末考试题量:不是太大,小题写的会快些,但是系列题找测试点的过程有时候很费时间难度:中等偏上,包含了诸多细节和需求,包括各种异常处理和特殊情况的处理测试与分析7-1容器-HashMap-检索分数10全屏浏览题目切换布局作者 蔡......
  • Intel710驱动代码分析-i40e_driver
    由于研究学习的需要,要对intelXL710网卡的驱动代码进行分析,主要分析其VF的相关代码,整个代码量相当大,有数万行。当然我也是从头开始学,一点一点分析并记录在51cto的博客中,如果大家在阅读过程中发现有错误,请及时提出,另外我会专门开一个专栏,用来记录对每个函数的分析,有些可能会对每行......
  • RT Thread中配置AD7190
    ​详见RTThread中配置AD7190-CSDN博客 ​编辑使用前先复位操作1SCL空闲时会高电平。2复位:上电后连续输入40个1(时钟周期)复位到已知状态,并等待500us后才能访问串行接口,用于SCLK噪音导致的同步。​编辑voidAD7190_Reset(void){spi_dev_ad7190=(structrt_spi_devi......
  • SP1716 GSS3 - Can you answer these queries III 题解
    题意:给定一个长度为$n$的序列$a$,$q$次操作,每次操作为以下之一:\(0\)\(x\)\(y\):将\(a_x\)修改为\(y\)\(1\)\(l\)\(r\):询问区间\([l,r]\)的最大连续子序列和思路:考虑线段树维护区间最大连续子序列和:线段树每个节点需要维护的信息:区间左端点$l$,区......
  • 哈尔滨华德学院-新生编程挑战赛
    哈尔滨华德学院-新生编程挑战赛A-签到_哈尔滨华德学院-新生编程挑战赛(同步赛)(nowcoder.com)签到#include<bits/stdc++.h>#definedebug(a)cout<<#a<<"="<<a<<'\n';usingnamespacestd;usingi64=longlong;typedefpair<i64,i64>PII......