首页 > 其他分享 >[CF1517F] Union

[CF1517F] Union

时间:2024-05-25 21:57:00浏览次数:25  
标签:CF1517F Union sum times 计数 转移 空闲

计数好题。关键点在于一步转化,然而我并没有发现。

首先期望转计数,对于这类问题,我们有很经典的处理手法:\(\sum_r\sum_S [f(S)=r]r=\sum_r\sum_S [f(S)\ge r]\)。

但是我并没有发现这一步的意义。事实上,这个条件写到树上就是,存在一个点,使得离它最近的非空闲点距离 \(>r\)

然后就可以 tree dp 了,设 \(f_{i,j}\) 表示 \(i\) 子树内离 \(i\) 最近的非空闲点距离为 \(j\),\(g_{i,j}\) 表示 \(i\) 子树内已经满足其子树内部 \(>r\) 限制的点中,离 \(i\) 最远的距离为 \(j\)。初始 \(f_{u,0}=g_{u,0}=1\)。对应空闲/非空闲。

转移:

  • \(f_{u,j}\times f_{v,k}\to f_{u,\min(j,k+1)}\)。
  • \(f_{u,j}\times g_{v,k}\),若 \(j+k+1>r\) 则转移到 \(g_{u,k+1}\),反之转移到 \(f_{u,j}\)。
  • \(g_{u,j}\times f_{v,k}\),类似。
  • \(g_{u,j}\times g_{v,k}\to g_{u,\max(j,k+1)}\)。

转移弱于树上背包,单次 \(\mathcal O(n^2)\),总复杂度 \(\mathcal O(n^3)\)。

总结:计数对象贡献形式的转化可能蕴含着限制条件的转化,时刻关注每一步对问题的影响。

标签:CF1517F,Union,sum,times,计数,转移,空闲
From: https://www.cnblogs.com/663B/p/18213043

相关文章

  • union存取低高位
    联合体类型,变量成员共用同一内存,同一时刻只能保存一个成员的数据。以1个4字节数据,传递r\g\b为例#include<stdint.h>#include<iostream>intmain(){uint32_tmyV;//用于模拟值传递//写{union{struct{......
  • c++ union
    在C++中,`union`是一种特殊的数据结构,它允许在同一内存空间中存储不同类型的数据。`union`允许您定义一个变量,但这个变量可以存储多种不同类型的值,而不是只能存储一种类型的值。在任何给定时间,`union`中只有一个成员可以有值,所有其他成员都将保持未定义的状态。`union`的声......
  • union 和union all 使用区别
    union和unionall把查询user表前5条数据查询user表数据从第7条数据开始,查询两条   通过union来把两个sql中的数据合并到一张表中,只查询出一条数据,会把重复的数据去掉 通过unionall查询出现出了两条数据,不会去重 ......
  • union共用体以及如何判断大小端?
    目录方法一(共用体):如何判断大小端二:方法二(方法一(共用体):在C语言当中,有一个和结构体非常像的语法叫共用体(Union)。unionmyunion{ inta; charb;};unionmyuniontest;在共用体中,所以成员共用一段内存,对某一个数据成员赋值,其他成员也就失效了。在上述例子中,a占4个字节,b占1......
  • openGauss UNION子句
    UNION子句UNION计算多个SELECT语句返回行集合的并集。UNION内部的SELECT语句必须拥有相同数量的列,列也必须拥有相似的数据类型。同时,每条SELECT语句中的列的顺序必须相同。语法格式UNION:结果中如果出现相同的值,仅保留一个。SELECTcolumn_name(s)FROMtable_name1UNIONSE......
  • 题解 CF1743F【Intersection and Union】
    postedon2022-10-2119:23:54|under题解|sourceproblem给定\(n\)个集合\(S_i\),以\(l_i,r_i\)的形式给出,集合的元素就是\(\{x|x\in[l_i,r_i]\cap\mathbb{N}\}\)。有三种集合间的二元运算,分别是交(\(\cap\))、并(\(\cup\))、对称差(\(\oplus\))。其中对称差(\(A\oplusB......
  • 字符型union注入
    注入目标和思路:拿到库名---拿到表名---拿到列名---拿到用户名和密码用id=1'orderbyx--+来确定表有几列,然后用id=0'unionselectx1,x1,x3--+来确定回显位,然后在更改回显位用database()来拿到数据库名,以下用sqlname表示。注:数据库系统的数据库information_schem......
  • 什么是UnionId、OpenId与wxopenid?
    如果你对UnionId、OpenId、wxopenid这三个概念傻傻分不清,那看这篇文章就对了。了解微信账户体系,能帮助你更好地做小程序设计。01概念解释小程序OpenIdOpenId是一个用户对于一个小程序/公众号的标识,开发者可以通过这个标识识别出用户。类似wxopenid,同一个人,使用不同的小程......
  • C++:union类型
    class和struct在C++上基本没啥区别,就只有class成员权限默认为private而struct默认为public而union和前两者稍有不同,其最大的区别在于内部成员变量共享一块内存,只是这个内存可以存放不同的变量类型(占用内存大小选取取占用最大的成员变量的占用内存),所以每次无论对哪个成员更改都......
  • C语言自定义类型变量——联合体(union)
    前言:在之前的文章中我们介绍了C语言中自定义类型变量之一的结构体,本篇我们将介绍它的兄弟姐妹之一的联合体类型,何为联合体?如何声明?有什么特点?让我们一起揭开它神秘的面纱 一.何为联合体 ?1.1联合体我们知道,创建变量的过程本质上是在内存中为变量开辟一片内存空间的过程,......