首页 > 其他分享 >reset

reset

时间:2024-02-28 19:55:05浏览次数:9  
标签:reset min sum cup 等价 fa 节点

link

考虑随机游走状的高斯消元:对于题目中的一个可重集 \(S\),令 \(f_S\) 表示,从 \(S\) 开始期望多少天后走到和 \(\ge m\) 的集合。

则有两种转移,分别对应摆烂或不摆烂:

(定义多重集减一个数为该集合去除一个该数,\(\min\{S\}\) 为多重集中最小元素,\(S \cup T\) 为两个多重集并)

\[f_S=p(1+f_{S-\min\{S\}})+\frac{1-p}{\min\{S\}}\sum_{i=1}^{\min\{S\}}(1+f_{S\cup \{i\}}) \]

\[f_S=1+pf_{S-\min\{S\}}+\frac{1-p}{\min\{S\}}\sum_{i=1}^{\min\{S\}}f_{S\cup \{i\}} \]

暴力可以依据这个式子高斯消元,可以求出每个 \(f\)。

考虑把状态之间的依赖关系画出来,容易发现这是一棵树,即 \(S-\min\{S\}\) 对应 \(S\) 在状态树上的父亲,\(S\cup \{i\}\) 对应它的每个儿子。

则即

\[f_u=1+pf_{fa_u}+\frac{1-p}{\min\{u\}}\sum_{v\in son_u}f_v \]

此树的叶子即为和 \(\ge m\) 的状态。

如果状态数比较少,我们可以从叶子开始向上推出每个节点的 \(f\),但这里显然状态数很大很大。

注意到对于一个状态 \(S\),如果 \(S\) 的最小值、和是确定的,它的子树形态也是确定的。

那么将所有 \((\min,\text{sum})\) 相同的节点归为一个等价类,这样一共有 \(\Theta(nm)\) 个等价类。

但是一个等价类内的 \(f\) 是不一样的。我们发现一个等价类的儿子是确定的等价类(们),但是父亲是不确定的,因为不知道一个多重集去除最小值后最小值是否改变。

即便如此,观察 \(1\) 式,对于 \(\text{sum}\ge m\) 的等价类的节点,他们不存在儿子节点,因此 \(f_u=1+pf_{fa_u}\)。即 \(f_{fa_u}\) 和 \(f_u\) 间存在一次关系式。

归纳地,对于一般的节点 \(u\) ,若知道了 \(f_u\) 和每个儿子的 \(f_v\) 的一次关系式,我们可以将这个关系代入 \(1\) 式,消去所有和儿子有关的未知量,得到 \(f_{fa_u}\) 和 \(f_u\) 的一次关系式。

因此,对于同一等价类中的所有节点,他们的 \(f\) 和其父亲的 \(f\) 存在固定的一次关系。

若我们求出了每个等价类的这个一次关系,则由于询问的 \(S\) 到根的路径是可以求出的,我们由根的 \(f\) 递推到 \(S\) 的 \(f\) 就解决了此题。

求所有关系是相对容易的,对于状态 \((\min=x,sum=y)\),子状态形如 \((z,y+z)\),其中 \(1\le z\le x\)。

假设一次关系形如 \(f_{(x,y)}=k_{(x,y)}f_{fa_(x,y)}+b_{(x,y)}\),则要求的就是 \(\sum_{z=1}^xk_{(z,y+z)}\) 以及 \(\sum_{z=1}^xb_{(z,y+z)}\)。

前缀和优化即可,复杂度 \(\Theta(nm+q+\sum|S|)\)。

标签:reset,min,sum,cup,等价,fa,节点
From: https://www.cnblogs.com/iorit/p/18041623

相关文章

  • C# ManualResetEvent
    C#ManualResetEventManualResetEvent被用于在两个或多个线程间进行线程信号发送。多个线程可以通过调用ManualResetEvent对象的WaitOne方法进入等待或阻塞状态。当控制线程调用Set()方法,所有等待线程将恢复并继续执行。ManualResetEvent是如何工作的在内存中保持着一个bool值......
  • git reset 命令详解 git revert命令详解。
    https://blog.csdn.net/wangdawei_/article/details/124543824gitreset命令详解reset命令介绍参数使用commit还没有pushcommit已经push补救gitrevert命令revert说明举例命令reset命令介绍gitreset命令格式为:gitreset[--soft|--mixed|--hard][<commitid>]在git......
  • pandas - reset_index() 函数 将Series对象转换为一个新的DataFrame
    #df=pd.read_excel(r"D:\PyCharm\年度数据处理\1月设备离线01.xlsx",sheet_name='Sheet2')#value_counts=df['解除时间'].value_counts().reset_index()#print(value_counts)这段代码的作用是对DataFrame中的"解除时间"列进行值计数,并将结果保存在一个新的DataFrame......
  • vscode windows CMakePresets.json
    vscode在windows下使用Ninja编译配置,使用VisualStudio编译环境。来源:CMakePresets.json参考:在VisualStudio中使用CMake预设进行配置和生成--示例文件CMakePresets.json{"version":2,"configurePresets":[{"name":"base","......
  • Git必知必会基础(11):撤销操作(含reset)
     数据准备 说明:下面对file的操作,都可以用通配符gitadd<file>...比如:gitadd*.txt gitrestore<file>...比如:gitrestore--staged*.txt 修改文件(已提交过,文件已在本地仓库中)撤销:对工作区修改修改文件内容,可以看到master->origin的颜色变了 此时文件在工作区,根据上图提......
  • 无涯教程-Java 正则 - Matcher reset(CharSequence input)函数
    java.util.regex.Matcher.reset(CharSequenceinput)方法使用新的输入序列重置此匹配器。Matcherreset-声明publicMatcherreset(CharSequenceinput)input - 新的输入字符序列。Matcherreset-返回值这个匹配器。Matcherreset -示例下面的示例显示java.uti......
  • 无涯教程-Java 正则 - Matcher reset()函数
    java.util.regex.Matcher.reset()方法重置此匹配器。Matcherreset()-声明publicMatcherreset()Matcherreset()-示例下面的示例显示java.util.regex.Matcher.reset()方法的用法。packagecom.learnfk;importjava.util.regex.Matcher;importjava.util.regex.Pat......
  • clearValidate()和resetFields()表单校验的用法和区别
    目标:实现表单重置和清除验证1.整个表单的校验移除<Formref="form"rule={this.rules}><FormItemprop="name"label="姓名"><Input/></FormItem><FormItemprop="age"label="年龄"><Input/></For......
  • git 进阶 重难点学习(git checkout和git branch 的区别 git reset 和git revert的用法)g
    git几个分区工作区暂存区本地仓库和远程仓库疑难问题:1.gitpull是到本地仓库还是工作区gitpull命令会将远程仓库的更新内容拉取到本地仓库,并将其合并到当前分支的工作区中。具体来说,gitpull命令首先从远程仓库拉取最新的提交到你的本地仓库,然后将这些变化合并到你当前......
  • 关于Pinia 使用setup方式书写 $reset方法失效问题
    在当我使用的时候踩到一个坑:当我在使用$reset想要重置state数据的时候,却报错了,经过排查发现是因为没有使用选项式进行编写代码关于$reset方法Pinia文档中只有简短的介绍:您可以通过调用store上的$reset()方法将状态重置到其初始值:conststore=useStore()store.$res......