Economic Difficulties【DP】【Codeforces 1263 F】

2023-11-11

Codeforces Round #603 (Div. 2) F


题意

  给你两棵树,结点分别是1~A与1~B,然后给了N台设备,并且A树和B树的叶子结点都是链接设备的。问的是,我们最多可以割几条边使得每个设备都能链接A树或者B树上任意的一个“1”号根结点即可。(最大割!?)

思路

  首先,它肯定不是单独的关系的,它们之间的关系是相关的,因为存在“分支点”这样的点,如果选了两个有最近分支点的,其实会得到额外的“+1”,甚至加的更多,所以不能简单的贪心来解决这样的问题。

  然后,看到这里的N比较的小,所以第一个想法就是O(N^{2})的来解决这个问题,那么,想到了一个在1~N这条链上的“背包式”的DP了。

在这里我们需要有一种思维:

我们譬如说先确定每个结点的size:

然后,我们可以从后往前去找寻结点,譬如说3、5、4都是叶子结点,我们可以发现如果我们现在选3的话,那么就是

再选择5号结点的时候,我们依然是只能向上一个单位。

现在,我们再去选择4号结点,会发现,我们可以向上走2个单位,

那么,向上走的条件是什么呢?就是此时的re_size + 1 == siz

  根据这样的性质,我们就可以确定了我们从后往前取每个点的所能做到的贡献,可以得到DP方程是:

dp[i] = max(dp[i], dp[j - 1] + len_{line})

所以,写入代码就是:

#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
#define INF 0x3f3f3f3f
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
#define MP(a, b) make_pair(a, b)
using namespace std;
typedef unsigned long long ull;
typedef unsigned int uit;
typedef long long ll;
const int maxN = 2e3 + 7;
int N, A, B, fa[2][maxN], head[2][maxN], cnt[2], leves[2][maxN];
struct Eddge
{
    int nex, to;
    Eddge(int a=-1, int b=0):nex(a), to(b) {}
}edge[2][maxN<<1];
inline void addEddge(int ith, int u, int v)
{
    edge[ith][cnt[ith]] = Eddge(head[ith][u], v);
    head[ith][u] = cnt[ith]++;
}
int siz[2][maxN];
void dfs_siz(int ith, int u)
{
    siz[ith][u] = 1;
    for(int i=head[ith][u], v; ~i; i=edge[ith][i].nex)
    {
        v = edge[ith][i].to;
        dfs_siz(ith, v);
        siz[ith][u] += siz[ith][v];
    }
}
int dp[maxN] = {0}, rez[2][maxN] = {0};
int dfs_rez(int ith, int u, int sum)
{
    int line_len = 0;
    rez[ith][u] += sum;
    if(fa[ith][u] && rez[ith][u] + 1 == siz[ith][u])
    {
        line_len++;
        line_len += dfs_rez(ith, fa[ith][u], siz[ith][u]);
    }
    return line_len;
}
inline void init()
{
    cnt[0] = cnt[1] = 0;
}
int main()
{
    scanf("%d", &N);
    init();
    scanf("%d", &A);
    for(int i=1; i<=A; i++) head[0][i] = -1;
    for(int i=2; i<=A; i++)
    {
        scanf("%d", &fa[0][i]);
        addEddge(0, fa[0][i], i);
    }
    for(int i=1; i<=N; i++) scanf("%d", &leves[0][i]);
    scanf("%d", &B);
    for(int i=1; i<=B; i++) head[1][i] = -1;
    for(int i=2; i<=B; i++)
    {
        scanf("%d", &fa[1][i]);
        addEddge(1, fa[1][i], i);
    }
    for(int i=1; i<=N; i++) scanf("%d", &leves[1][i]);
    dfs_siz(0, 1);
    dfs_siz(1, 1);
    for(int i=1, len_line; i<=N; i++)
    {
        memset(rez, 0, sizeof(rez));
        for(int ith = 0; ith <= 1; ith++)
        {
            len_line = 0;
            for(int j=i; j>=1; j--)
            {
                len_line += dfs_rez(ith, leves[ith][j], 0);
                dp[i] = max(dp[i], dp[j - 1] + len_line);
            }
        }
    }
    printf("%d\n", dp[N]);
    return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Economic Difficulties【DP】【Codeforces 1263 F】 的相关文章

  • Codeforces Round #291 (Div. 2)

    题目链接contest 514 A Chewba ca and Number 不允许有前导零 所以如果第一位是9的话 需要特别考虑 一开始理解错了题意 又WA了呜呜呜 include
  • poj 2096 Collecting Bugs

    Problem poj org problem id 2096 vjudge net contest 151678 problem Q Reference blog csdn net xingyeyongheng article detai
  • floyd算法 O(n^3)

    标准弗洛伊德算法 三重循环 循环结束之后 d i j 存储的就是点 i 到点 j 的最短距离 需要注意循环顺序不能变 第一层枚举中间点 第二层和第三层枚举起点和终点 特点 1 复杂度为O n 3 只能处理200以内的点 2 一次求出所有结点
  • Beautiful Mirrors【Codeforces 1265 E】【期望DP】

    Codeforces Round 604 Div 2 E 题记 不是杭电今年份的原题嘛 为什么比赛的时候没想到这个方面呢 当然题也读错了 尬 杭电多校原题 然后再继续说一下这道题的特殊之处吧 随便说说 典型问题 没有特殊之处 大概画了个图
  • Clannad【2018四川省赛】【AC自动机 + DP】

    题目链接 第十届四川省赛C题 挺好的一道题 就是要做一个last优化 每次的last要返回到之前的有值节点 也就是单词的尾的对应节点 然后就不会超时了 呜呜呜 之前一直超时 以为是初始化的memset 问题 以前被卡过memset 然后发现
  • 【BZOJ 4069】 [Apio2015]巴厘岛的雕塑

    4069 apio2015 巴厘岛的雕塑 Time limit 1000 ms Memory limit 65536 KB Description The province of Bali has many sculptures locat
  • LeetCode: 91 解码方法

    方法一 用递归来做 这道题一开始以为是简单的递归问题 按照从前往后的顺序递归 总是在 10 这个输入上报错 按照从后向前的方法递归 应对短序列没有问题 但是面对长序列 因为存在大量重复计算 所以超时 如果用递归来做 应该用记忆化递归 cla
  • 免费馅饼【暑期集训I题】【经典DP】

    这不是一道很废脑汁的题目 可以说和前面的数塔相同 只是题目讲的长了些而已 都说天上不会掉馅饼 但有一天gameboy正走在回家的小径上 忽然天上掉下大把大把的馅饼 说来gameboy的人品实在是太好了 这馅饼别处都不掉 就掉落在他身旁的10
  • hdu 1058 Humble Numbers

    Problem acm hdu edu cn showproblem php pid 1058 题意 找出从小到大第 n 个因子 除了 1 和本身 只有 2 3 5 7 的数 即第 n 个 num 2 a 3 b 5 c 7 d 的数 据说
  • 2020牛客暑期多校训练营(第八场)E Enigmatic Partition —— 找规律,差分上差分,有丶东西

    This way 题意 定义合法序列 n a1 a2 am m的大小是你自己构造的 m gt 3 并且满足以下条件 定义f n 为构造n的合法序列的情况数 然后每次问你n为l r中所有数的f的和是多少 题解 其实就相当于要预处理每个数有多少
  • DP和HDMI区别

    转自 https www toutiao com i6877677362054595080 在目前市面上显示器接口中 VGA和DVI已经逐渐退出了历史舞台 Type C还算是小众 而DP DisplayPort 与HDMI则成为了主流产品的
  • hdu 4405 Aeroplane chess

    Problem acm hdu edu cn showproblem php pid 4405 vjudge net contest 151678 problem R Reference bbs csdn net topics 380193
  • hdu 1003 最大连续子序列和及起始位置 && hdu 1087 最大上升子序列和

    hdu 1003 题意 求最大连续子序列和及起始位置 对于动态规划问题要找出其子问题 考虑到dp的无后效性 dp i 表示以i为结尾的最大值 当dp i 1 gt 0时 以i 1为值对以i为结尾的值有贡献 否则起始位置变为自己 动态地更新最
  • The Lost House【树形DP+期望+构造路径】

    题目链接 POJ 2057 题意 有一棵N的点的树 开始的时候蜗牛在1号结点 它不知道它的家在哪个叶子结点 树上的有些结点有虫虫 虫虫会告诉你 你的家是否在以它所在结点为根的子树上 现在需要你规划走的方案 使得找到哪个叶子结点才是家的所走路
  • Rabbit的工作(2)【牛客练习赛36_C + dp背包】

    题目链接 那么的巧合 竟是这题的原题 就是 我们既然一定要选取K个任务 就先去取K个任务 然后逐一加上需要的额外天数即可 include
  • 动态规划问题——最长上升子序列(LIS)(一)

    原文转载自我的博客benym cn 推荐链接 动态规划问题 最长上升子序列 LIS 二 动态规划问题 最长上升子序列 LIS 三 如 求 2 7 1 5 6 4 3 8 9 的最长上升子序列 我们定义d i i 1 n 来表示前i个数以A
  • [HDU 5079][2014 Asia AnShan Regional Contest]Square(DP套DP)

    题目链接 http acm hdu edu cn showproblem php pid 5079 题目大意 给你一个 n n n 8 n middot n n le 8 的棋盘 上面有一些格子必须是黑色 其它可以染黑或者染白 对于一个棋盘
  • 备战2023蓝桥国赛-传纸条

    题目描述 解析 这道题想了我好久 一开始我是想假如只走一条路线 从 1 1 走到 m n 这种问题该怎么解决呢 针对这种问题我是设了dp k i j 表示走了k步到达 i j 的好心程度之和的最大值 然后根据这个来写出转移方程来计算 后面就
  • Thief in a Shop 【CodeForces - 632E】【背包】

    题目链接 给了N个物品 每个物品无限个 我们要的是求刚好我们拿了K个物品的时候 能组成哪几种数 我们可以想个办法去填充 那么就需要有一个所谓的0状态 然后假如不足K个的时候 就可以拿这个所谓的0状态来填充了 所以 我们把所有的数排序 然后都
  • AtCoder Beginner Contest 332 G. Not Too Many Balls(最大流转最小割 dp)

    题目 n n lt 500 种球 第i种有ai 0 lt ai lt 1e12 个球 m m lt 5e5 个盒子 第j个能放bj 0 lt bj lt 1e12 个球 特别地 第j个盒子最多能放i j个第i种球 求m个盒子能放的最多的球的

随机推荐

  • 8、工厂方法

    文章目录 概念 demo 概念 定义一个创建对象的接口 让其子类自己决定实例化哪一个工厂类 工厂模式使其创建过程延迟到子类进行 demo package com cn go designpattern public class Factor
  • 同步、异步、阻塞、非阻塞的理解

    同步 异步 阻塞 非阻塞的理解 有关这四个概念总会混淆 前几天特意查了下 简单理解了下这四个概念 若理解的不对 希望大家指正 一 同步异步 同步是调用者发出请求后 一直等待被调用者响应 如果被调用者没有响应那会一直不返回 以买书为例 如下
  • counterfactual generation network——因果推断用于提高分类器鲁棒性

    因果推断本是一个小众方向 但是感觉近几年突然火了起来 本文便是2021年发表于ICLR的一篇将因果推断用于提高图像分类的文章 本文出发点 先说一下本文针对的问题 我们知道图像分类任务就是将输入网络的图像尽量映射成我们想要的输出结果 通常是一
  • 2021江西省icpc(A,B,D,F,G,H,J,K,L)

    K Many Littles Make a Mickle 签到题 任意门 先从最简单的签到题开始吧 include
  • IPIDEA的使用方式

    文章目录 一 平台介绍 1 前言 2 简单介绍 3 适用场景 4 特色功能 二 获取代理ip池 1 注册信息 2 获取代理API 3 获取代理信息并检测代理可用性 三 代理爬取数据 1 编写功能代码 2 插入到代理代码 四 使用感受 一 平
  • Mac OS X 上干净卸载软件

    英文参考文章地址 http www cultofmac com 90060 how to completely uninstall software under mac os x macrx 在Mac OS X上卸载软件一般都很简单 在 应
  • 【Sentry使用】自定义transaction

    在使用Sentry时 你会发现有两种颜色的柱形图 一个是紫色的 在上面 一个是灰色的 在下面 这两类柱形图分别代表error和transaction 而在Python脚本环境下 不会自动进行transaction的记录 也就是说只会在出现异
  • YOLO的XML和TXT标注文本解释

    XML和TXT标注文本解释 转换函数 xml 左上角坐标和右下角坐标 转换为txt txt 中心点坐标 比例 宽 比例 高 比例 0到1之间 转换函数
  • aix安装bff_AIX的yum安装

    之前在AIX上安装yum是按照步骤一步步来做 今天找到一个脚本 可以很方便的执行脚本来做 ftp ftp software ibm com aix freeSoftware aixtoolbox ezinstall ppc 可惜的是很多时候
  • 中小研发团队架构实践之统一应用分层

    中小研发团队架构实践之统一应用分层 原文 中小研发团队架构实践之统一应用分层 一 写在前面 应用分层这件事情看起来很简单 但每个程序员都有自己的一套 哪怕是初学者 如何让一家公司的几百个应用采用统一的分层结构 并得到大部分程序员的认同呢 这
  • RabbitMQ死信队列

    目录 一 概念 二 出现死信的原因 三 实战 一 代码架构图 二 消息被拒 三 消息TTL过期 四 队列达到最大长度 一 概念 先从概念解释上搞清楚这个定义 死信 顾名思义就是无法被消费的消息 字面意思可以这样理解 一般来说 produce
  • 同心聚合力,开局谋发展——云孚科技参加哈工大青企联首届年会

    3月2日 云孚科技CEO张文斌先生受邀参加了历时3天的哈尔滨工业大学青年企业家联合会 以下称青企联 首届年会 并参与龙江行活动 哈工大党委常务副书记安实出席青企联年会并致辞 哈工大原副校长郭斌出席青企联年会并参加了赴香坊区调研座谈会 张文斌
  • Python 中的json模块dumps参数详解

    1 什么是JSON 维基百科中的定义 JSON JavaScript Object Notation JavaScript对象表示法 是一种由道格拉斯 克罗克福特构想和设计 轻量级的资料交换语言 该语言以易于让人阅读的文字为基础 用来传输由
  • 如何使用百度的GPU来跑自己的项目

    请先阅读如下两篇文章 并先读完我的文章再决定你是否要动手安装 因为有很多坑 白嫖百度GPU TeslaV100笔记 在 AI Studio 上使用 tensorflow 和 pytorch 的方法 亲测可用 免费使用谷歌GPU 这里谷歌是需
  • easyui field 获取对象子属性的值

    我们从服务器获取的数据格式如下 total 10 rows orderId 4 payment 1 paymentType 1 postFee 1 status 2 createTime 1510029825000 updateTime 1
  • 深入解析IT专业分类、方向及就业前景:高考毕业生如何选择适合自己的IT专业?重点探索近年来人工智能专业发展及人才需求

    目录 一 IT专业的就业前景和发展趋势 二 了解IT专业的分类和方向 三 你对本专业的看法和感想 四 本专业对人能力素养的要求 五 建议和思考 其它资料下载 当今社会 信息技术行业以其迅猛的发展和无限的潜力成为了吸引无数年轻人的热门选择 特
  • leetcode学习项目

    https leetcode cn com explore learn card data structure binary tree leetcode上专项介绍供学习树 https leetcode cn com explore lear
  • Linux中创建sftp用户并限制目录权限

    注意两点 一是禁止该用户通过ssh登录 二是不需要创建家目录 家目录简单来说 就是在 home下的用户命令 默认每个用户在 home中都是有与用户名一样的文件夹 创建组 groupadd sftp 创建用户 useradd g sftp s
  • 作为计算机专业学生,最应该学习的课程前五位是什么?【知乎】

    http www zhihu com question 19628851 answer 100293 对于目前排在首位的兵哥哥的答案 不敢苟同 本人软件工程专业 关于计算机专业和软件工程专业 实际上还是大相径庭的 远不是别人所说的软硬件的偏
  • Economic Difficulties【DP】【Codeforces 1263 F】

    Codeforces Round 603 Div 2 F 题意 给你两棵树 结点分别是1 A与1 B 然后给了N台设备 并且A树和B树的叶子结点都是链接设备的 问的是 我们最多可以割几条边使得每个设备都能链接A树或者B树上任意的一个 1 号