题意

描述有点麻烦,就不写了。

\(\texttt{Data Range:}1\leq n\leq 500\)

题解

势能函数这个东西好神啊……

这个题目用常规的 DP 好像做不出来,所以我们可以考虑设计一个函数将一个局面到最终局面的期望进行评估,如果这个函数能够满足任意一次操作会使得函数值的期望增加 \(1\),那么就可以用最终局面的函数值减去初始局面的函数值就得到期望操作次数了。

同时,必须满足最终局面无法转移,因为有环的转移图比较难去算转移,这个时候势能函数就出来了。

这个题目中我们考虑设 \(F(S)=\sum f(a_i)\),其中 \(a_i\) 表示有多少个点依赖这个点(当 \(i\) 依赖别的点的时候 \(a_i\) 没有定义)。现在我们想来求出这个 \(f\)。

考虑每一次随机选择两个点 \(p,q\) 来合并,\(p,q\) 原本有 \(u,v\) 个依赖它的点,那么根据之前的定义有如下方程:(这里应该是 \(\texttt{s}\)\(\texttt{kydogli}\) 写错了)

\[f(u)+f(v)+1=\frac{1}{2}[f(u+1)+vf(0)]+\frac{1}{2}[f(v+1)+uf(0)]
\]

这里有一个 trick:在势能函数中,可以直接钦定 \(f(0)=0\),于是得到

\[f(u)+f(v)+1=\frac{1}{2}\left(f(u+1)+f(v+1)\right)
\]

由于这个等式看起来非常对称,同时它需要对于任意 \(u,v\) 都成立,于是我们可以考虑分离 \(u\) 和 \(v\):

\[\left(f(u)+\frac{1}{2}\right)+\left(f(v)+\frac{1}{2}\right)=\frac{1}{2}f(u+1)+\frac{1}{2}f(v+1)
\]

所以很明显有

\[2f(u)+1=f(u+1)
\]

这个东西跟 Hanoi 塔的递推式是一样的,所以我们可以直接写出 \(f(u)=2^u-1\)。

然后用末状态的势能函数值减去初始状态的就得到了期望操作次数。

代码

#include<bits/stdc++.h>
using namespace std;
typedef int ll;
typedef long long int li;
const ll MAXN=2e5+51,MOD=1e9+7;
ll n,x,res;
ll sz[MAXN];
inline ll read()
{
register ll num=0,neg=1;
register char ch=getchar();
while(!isdigit(ch)&&ch!='-')
{
ch=getchar();
}
if(ch=='-')
{
neg=-1;
ch=getchar();
}
while(isdigit(ch))
{
num=(num<<3)+(num<<1)+(ch-'0');
ch=getchar();
}
return num*neg;
}
inline ll qpow(ll base,ll exponent)
{
ll res=1;
while(exponent)
{
if(exponent&1)
{
res=(li)res*base%MOD;
}
base=(li)base*base%MOD,exponent>>=1;
}
return res;
}
int main()
{
n=read();
for(register int i=1;i<=n;i++)
{
x=read(),x!=-1?sz[x]++:1;
}
for(register int i=1;i<=n;i++)
{
sz[i]?res=(res+qpow(2,sz[i])-1)%MOD:1;
}
printf("%d\n",(qpow(2,n-1)-1-res+MOD)%MOD);
}

CodeForces 1025G Company Acquisitions的更多相关文章

  1. Solution -「CF 1025G」Company Acquisitions

    \(\mathcal{Description}\)   Link.   \(n\) 个公司,每个公司可能独立或者附属于另一个公司.初始时,每个公司附属于 \(a_i\)(\(a_i=-1\) 表示该公 ...

  2. Codeforces 1090A - Company Merging - [签到水题][2018-2019 Russia Open High School Programming Contest Problem A]

    题目链接:https://codeforces.com/contest/1090/problem/A A conglomerate consists of n companies. To make m ...

  3. CodeForces 1062E Company

    Description The company \(X\) has \(n\) employees numbered from \(1\) through \(n\). Each employee \ ...

  4. Codeforces Round #505 (Div 1 + Div 2 Combined) Solution

    从这里开始 题目列表 瞎扯 Problem A Doggo Recoloring Problem B Weakened Common Divisor Problem C Plasticine zebr ...

  5. Codeforces 556D Restructuring Company

    传送门 D. Restructuring Company time limit per test 2 seconds memory limit per test 256 megabytes input ...

  6. Codeforces Round #321 (Div. 2) B. Kefa and Company 二分

    B. Kefa and Company Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/580/pr ...

  7. [刷题]Codeforces 794C - Naming Company

    http://codeforces.com/contest/794/problem/C Description Oleg the client and Igor the analyst are goo ...

  8. CodeForces 125E MST Company

    E. MST Company time limit per test 8 seconds memory limit per test 256 megabytes input standard inpu ...

  9. Codeforces 1062 E - Company

    E - Company 思路: 首先,求出每个点的dfs序 然后求一些点的公共lca, 就是求lca(u, v), 其中u是dfs序最大的点, v是dfs序最小的大点 证明: 假设o是这些点的公共lc ...

随机推荐

  1. git server“丢失”commit问题探究

    1 背景 gitlab某仓库有同事发现部分代码文件内容丢失,具体表现 A. dev分支commit信息是连续的,看不出明显的大时间范围批量丢失 B. 以SuncardCashier/control/C ...

  2. Spring Eureka 本地Docker集群部署

    故事背景 最近因为产线使用的服务与发现服务,使用的是Spring Cloud Eureka集群部署,为了以后调试产线的问题,想在本地搭建和产线一样的环境.产线的所有服务都是基于K8s和Docker部署 ...

  3. Elasticsearch数据库 | Elasticsearch-7.5.0应用基础实战

    Elasticsearch 是一个可用于分布式以及符合RESTful 风格的搜索和数据分析引擎.-- Elastic Stack 官网 关于Elasticsearch的"爱恨情仇" ...

  4. Android Widget开发过程中的一些问题汇总

    一.基本实现要点 布局文件 配置文件 控制文件 AndroidManifest.xml

  5. Spring学习(六)--Spring的IOC

    1.autowiring(自动依赖装配)的实现 自动装配中不需要对Bean属性做显示的依赖管理方式,只需要配置好autowiring的属性就可以,IOC容器会自动根据这个属性的配置通过反射自动找到属性 ...

  6. Python3基础——字符串类型

    Text Sequence Type - str(immutable) class str(object='') class str(object=b'', encoding='utf-8', err ...

  7. LiteOS-任务篇

    目录 前言 链接 参考 笔录草稿 基本概念 任务相关概念 LiteOS 任务运作机制 内核初始化 创建任务 创建任务有两种方案 任务相关函数 任务开发流程 创建创建任务 部分源码 例子 创建任务的任务 ...

  8. 《To B产品经理进阶》

    一.沙漏哟:To B产品技术标准化(全网独家) 经济机器是怎样运行的(超级简单模式理解经济运行规律) <俞军产品方法论>(思维模型.交易模型.经济学.心理学) <深度思考六步法> ...

  9. python进程开启的两种方式

    一.进程 1.1.方式一 from multiprocessing import Process import time #方式一 def task(name): print(f"my na ...

  10. YCM 安装小记

    layout: post title: YCM 安装小记 半夜,女朋友在那边抱怨购物车的物品秒无货,我这边刚好成功安装了vim上最难装的插件--YouCompleteMe,内心非常激动,于是本着取之于 ...