The Fair Nut and the Best Path CodeForces - 1083A(树形DP)

传送门

题意:给出一个树,然后每个点都有相应的权值,点与点之间有相应的边权,只能跑树上的简单路径,也就是每个点只能经过一次,最后经过路径落下的值最大能是多少,经过点加上点权,经过边,减去边权。

题解:树形DP,dp[u][0]表示经过u这个点的一个子边所能达到的最大值,也就是起点是儿子,终点是u,dp[u][1]表示经过了u,也就是起点和终点分别是儿子,这个dp[u][1]先维护dp[u][0]的次大值即可,然后最后两者相加时把中间多加的减下即可。

友情提示:爆int

附上代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=3e5+5;
int n,a[maxn];
ll dp[maxn][2];
struct data{int v,w,next;}e[maxn*2];
int head[maxn],tot;
void add_edge(int u,int v,int w)
{
    e[++tot].v=v;e[tot].w=w;e[tot].next=head[u];head[u]=tot;
    e[++tot].v=u;e[tot].w=w;e[tot].next=head[v];head[v]=tot;
}
ll ans=0;
void dfs(int u,int fa)
{
    dp[u][0]=a[u];
    ans=max(ans,dp[u][0]);
    for(int i=head[u];i;i=e[i].next){
        if(e[i].v==fa)continue;
        dfs(e[i].v,u);
        bool flag=false;
        if(a[u]+dp[e[i].v][0]-e[i].w>dp[u][0]){
            dp[u][1]=dp[u][0];
            dp[u][0]=a[u]+dp[e[i].v][0]-e[i].w;
            flag=true;
        }
        if(!flag){
            if(a[u]+dp[e[i].v][0]-e[i].w>dp[u][1]){
                dp[u][1]=a[u]+dp[e[i].v][0]-e[i].w;
            }
        }
        if(dp[u][1]){
            ans=max(ans,dp[u][1]+dp[u][0]-a[u]);
        }
        ans=max(ans,dp[u][0]);
    }
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    int u,v,w;
    for(int i=1;i<n;i++){
        scanf("%d%d%d",&u,&v,&w);
        add_edge(u,v,w);
    }
    dfs(1,-1);
    printf("%lld\n",ans);
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nut-datepicker是一个日期选择器,用于在前端界面中选择日期。它的样式可以在picker.scss文件中找到并进行自定义调整。如果发现样式定位异常,可以在全局样式文件中重新定义样式,例如使用以下代码进行重新定义: ``` <style> .nut-picker-list .nut-picker-content, .nut-picker-list .nut-picker-roller { position: relative; } </style> ``` 在使用nut-datepicker时,可以通过以下代码来展示效果: ``` 打开选择器: <div class="label">记录日期:</div> <nut-calendar :is-visible.sync="isVisible" startDate="2022-01-01" :default-value="recordTime" :is-auto-back-fill="true" @close="switchPickerClose" @choose="setChooseValue" > </nut-calendar> <nut-cell :is-link="true" :show-icon="true" @click.native="switchPicker"> <span slot="title">日期选择</span> <div slot="desc" class="selected-option"> <span class="show-value"> {{recordTime ? recordTime : '请选择日期'}} </span> </div> </nut-cell> ``` 在代码中,通过设置isVisible的值来控制选择器的显示和隐藏。当选择器关闭时,会触发close事件,可以在switchPickerClose方法中进行处理。当选择日期时,会触发choose事件,可以在setChooseValue方法中获取选择的日期并进行处理。 需要注意的是: (1)默认打开时间和defaultValue相关,可以通过设置defaultValue来指定打开的时间; (2)如果不指定startDate,选择器可选择日期的开始时间默认为2000-01-01 00:00,可以根据自身情况给定或动态赋值; (3)如果不指定endDate,那么选择器只能选择当天的0时时间,可以根据自身情况给定或动态赋值。 总结来说,nut-datepicker是一个用于选择日期的前端组件,可以通过设置相关属性和监听事件来实现日期的选择和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值