BZOJ5290 [Hnoi2018]道路


前言

这道题目我竟然没有在去年省选切?

我太菜了.

Solution

对题面进行一个语文透彻解析,发现这是一个二叉树,乡村都是叶子节点,城市都有两个儿子.(依据在下)

那么就可以树形dp了.我们假设公路是左儿子,铁路是右儿子.

\(dp_{i,j,k}\)表示到了\(i\)节点,经过了\(j\)条未翻修的公路,经过了\(k\)条未翻修的铁路.

考虑对于不同的\(i\)怎么计算.

  1. 叶子节点,直接计算贡献即可.

  2. 非叶子节点,考虑要么不翻修公路,要么不翻修铁路,直接从左右儿子的两种情况转移就好了.

具体的转移方程参考代码.

代码实现

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<set>
#include<map>
#include<iostream>
using namespace std;
#define ll long long
#define re register
#define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout)
inline int gi()
{
    int f=1,sum=0;char ch=getchar();
    while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}
    return f*sum;
}
const int N=40010;
ll dp[510][41][41];
int son[N][2],c[N<<1],b[N<<1],a[N<<1],n,id[N<<1],sta[N<<1],tot,top;
void dfs(int u,int x,int y)
{
    int p=id[u]=top?sta[top--]:++tot;
    if(!son[u][0])
    {
        for(int i=0;i<=x;i++)
            for(int j=0;j<=y;j++)
                dp[p][i][j]=1ll*c[u]*(a[u]+i)*(b[u]+j);
        return;
    }
    dfs(son[u][0],x+1,y);dfs(son[u][1],x,y+1);
    int ls=id[son[u][0]],rs=id[son[u][1]];
    for(int i=0;i<=x;i++)
        for(int j=0;j<=y;j++)
            dp[p][i][j]=min(dp[ls][i][j]+dp[rs][i][j+1],dp[ls][i+1][j]+dp[rs][i][j]);
    sta[++top]=ls;sta[++top]=rs;//重复利用了.
}
int main()
{
    n=gi();
    for(int i=1;i<n;i++)
    {
        int s=gi(),t=gi();
        if(s<0)s=-s+n-1;
        if(t<0)t=-t+n-1;
        son[i][0]=s;son[i][1]=t;
    }
    for(int i=n;i<=n+n-1;i++)
        a[i]=gi(),b[i]=gi(),c[i]=gi();
    dfs(1,0,0);
    printf("%lld\n",dp[1][0][0]);
    return 0;
}

【BZOJ5290】 [Hnoi2018]道路的更多相关文章

  1. [BZOJ5290][HNOI2018]道路

    bzoj luogu sol 考场上普及\(dp\)都做不来,果然是思想僵化了. 设\(f[u][i][j]\)表示在\(u\)点,上方有\(i\)条未修复的公路和\(j\)条未修复的铁路的最小花费. ...

  2. 5290: [Hnoi2018]道路

    5290: [Hnoi2018]道路 链接 分析: 注意题目中说每个城市翻新一条连向它的公路或者铁路,所以两种情况分别转移一下即可. 注意压一下空间,最后的叶子节点不要要访问,空间少了一半. 代码: ...

  3. [HNOI2018]道路 --- 树形DP

    [HNOI2018]道路 题目描述: W 国的交通呈一棵树的形状.W 国一共有 \(n-1\) 个城市和 \(n\) 个乡村, 其中城市从 \(1\) 到 \(n-1\) 编号,乡村从 \(1\) 到 ...

  4. 【BZOJ5290】[HNOI2018]道路(动态规划)

    [BZOJ5290][HNOI2018]道路(动态规划) 题面 BZOJ 洛谷 题目直接到洛谷上看吧 题解 开始写写今年省选的题目 考场上我写了一个模拟退火骗了\(90\)分...然而重测后只剩下45 ...

  5. bzoj 5290: [Hnoi2018]道路

    Description Solution PJDP毁青春 注意到性质:到根的道路不超过 \(40\) 条 所以我们只关系一个点上面的道路的情况就行了 设 \(f[x][i][j]\) 表示一个点 \( ...

  6. [HNOI2018]道路(DP)

    题目描述 W 国的交通呈一棵树的形状.W 国一共有n−1n - 1n−1 个城市和nnn 个乡村,其中城市从111 到n−1n - 1n−1 编号,乡村从111 到nnn 编号,且111 号城市是首都 ...

  7. 洛谷4438 [Hnoi2018]道路 【树形dp】

    题目 题目太长懒得打 题解 HNOI2018惊现普及+/提高? 由最长路径很短,设\(f[i][x][y]\)表示\(i\)号点到根有\(x\)条未修公路,\(y\)条未修铁路,子树所有乡村不便利值的 ...

  8. [洛谷P4438] HNOI2018 道路

    问题描述 W 国的交通呈一棵树的形状.W 国一共有n - 1个城市和n个乡村,其中城市从1到n - 1 编号,乡村从1到n编号,且1号城市是首都.道路都是单向的,本题中我们只考虑从乡村通往首都的道路网 ...

  9. BZOJ.5290.[AHOI/HNOI2018]道路(树形DP)

    BZOJ LOJ 洛谷 老年退役选手,都写不出普及提高DP= = 在儿子那统计贡献,不是在父亲那统计啊!!!(这样的话不写这个提高DP写记忆化都能过= =) 然后就令\(f[x][a][b]\)表示在 ...

随机推荐

  1. DataTable xml 互相转换

    //测试方法 public static DataTable Test() { string savePath = System.AppDomain.CurrentDomain.BaseDirecto ...

  2. Java学习笔记:23种设计模式

    设计模式(Design pattern)的定义: In software engineering, a software design pattern is a general, reusable s ...

  3. OneZero第三周第一次站立会议(2016.4.4)

    1. 时间: 13:30--13:45  共计15分钟. 2. 成员: X 夏一鸣 * 组长 (博客:http://www.cnblogs.com/xiaym896/), G 郭又铭 (博客:http ...

  4. [cmd]如何设置 Windows 默认命令行窗口大小和缓冲区大小

    Windows 命令行 cmd 窗口系统默认的大小(80*40)对于现在的屏幕配置已经跟不上时代了,我们总是要把它改大些,而且缓冲区大小也想改得大大的.单纯的为当前的 Windows 命令行窗口修改显 ...

  5. Neural Network Basics

    在学习NLP之前还是要打好基础,第二部分就是神经网络基础. 知识点总结: 1.神经网络概要: 2. 神经网络表示: 第0层为输入层(input layer).隐藏层(hidden layer).输出层 ...

  6. 2018.11.24 poj1743Musical Theme(二分答案+后缀数组)

    传送门 代码: 二分答案. 然后对于预处理的heightheightheight数组分成几段. 保证每一段中都是连续的几个heightheightheight并且这些heightheightheigh ...

  7. Servlet中(Session、cookies、servletcontext)的基本用法

    /req: 用于获得客户端(浏览器)的信息 //res: 用于向客户端(浏览器)返回信息 1.session的设置:            //得到和req相关联的session,如果没有就创建ses ...

  8. react组件父传子

    react组件父传子,子组件使用父组件的数据,用props import React, { Component } from 'react'; class App extends Component ...

  9. windows socket扩展函数

    1.AcceptEx() AcceptEx()用于异步接收连接,可以取得客户程序发送的第一块数据. BOOL AcceptEx( _In_  SOCKET       sListenSocket,   ...

  10. 使用spring boot +WebSocket实现(后台主动)消息推送

    言:使用此webscoket务必确保生产环境能兼容/支持!使用此webscoket务必确保生产环境能兼容/支持!使用此webscoket务必确保生产环境能兼容/支持!主要是tomcat的兼容与支持. ...