Min-max 容斥与 kth 容斥
期望的线性性:
\]
证明:
\]
\]
\]
\]
Min - Max 容斥:
我们现在有一个全集 \(U= \lbrace{a_1,a_2,a_3,...,a_n}\rbrace\)
我们设:
{\max(S)=\max\limits_{a_i∈S}a_i}\\
{\min(S)=\min\limits_{a_i∈S}a_i}\\
\end{cases}
\]
有:
\max(S)=\sum_{T \in S}\limits(-1)^{|T|-1}\min(T)\\
\min(S)=\sum_{T \in S}\limits(-1)^{|T|-1}\max(T)\\
\end{cases}
\]
二项式反演证明:
我们想构造一个函数 \(f\) ,使得:
\]
然后依然考虑一个元素排序后在哪些集合产生贡献
假设某个元素从小到大后排在第 \(x\) 位(集
合大小为 \(n\)),那么它的贡献就是:
\]
\]
变换一下:
\]
\]
二项式反演:
\]
\]
\]
于是:
\]
证毕
kth 容斥:
\]
证明:
设:
\]
假设某个元素从小到大后排在第 \(x\) 位(集
合大小为 \(n\)),有:
\]
\]
变换一下:
\]
\]
二项式反演:
\]
\]
\]
于是:
\]
证毕
Min-Max容斥定理在期望下也成立:
E(\max(S))=\sum_{T \in S}\limits(-1)^{|T|-1}E(\min(T))\ \ (1)\\
\\
E(\min(S))=\sum_{T \in S}\limits(-1)^{|T|-1}E(\max(T))\ \ (2)\\
\\
E(Kthmax(S))=\sum_{T⊆S}(-1)^{|T|-k}\left(\begin{array}{c}|T|-1\\ k-1\end{array}\right)E(min(T))\ \ (3)\\
\end{cases}
\]
以 \((1)\) 为例:
\]
证明:
由于:
\]
有:
\]
由期望的线性性,直接整理,得:
\]
证毕
[HAOI2015]按位或
#include<bits/stdc++.h>
using namespace std;
int n;
int cnt[1<<20];
double p[1<<20],ans;
int main(){
scanf("%d",&n);
for(int s=0;s<(1<<n);s++){
scanf("%lf",&p[s]);
cnt[s]=cnt[s>>1]+(s&1);
}
for(int i=1;i<(1<<n);i<<=1){
for(int s1=0;s1<(1<<n);s1+=(i<<1)){
for(int s2=0;s2<i;s2++){
p[i+s1+s2]+=p[s1+s2];
}
}
}
for(int i=1;i<(1<<n);i++)if(1-p[i^((1<<n)-1)])ans+=((cnt[i]&1)?1:-1)/(1-p[i^((1<<n)-1)]);
if(ans<1e-10)puts("INF");
else printf("%.10lf",ans);
return 0;
}
重返现世
#include<bits/stdc++.h>
using namespace std;
int n,m,t;
long long dp[15][10005];
const long long md=998244353;
inline long long pwr(long long x,long long y){
long long res=1;
while(y){
if(y&1)res=res*x%md;
x=x*x%md;y>>=1;
}return res;
}
int main(){
scanf("%d%d%d",&n,&t,&m);
t=n-t+1;dp[0][0]=1;
for(int i=1;i<=n;i++){
int p;scanf("%d",&p);
for(int k=m;k>=p;k--){
for(int j=t;j;j--){
dp[j][k]=(dp[j][k]+dp[j-1][k-p]-dp[j][k-p])%md;
}
}
}
long long ans=dp[t][0];
for(int i=1;i<=m;i++)ans=(ans+dp[t][i]*pwr(i,md-2)%md)%md;
printf("%lld",(ans+md)*m%md);
return 0;
}
[PKUWC2018]随机游走
#include<bits/stdc++.h>
using namespace std;
int n,q,rt;
int ver[45],ne[45],head[45],tot,deg[45];
inline void link(int x,int y){
ver[++tot]=y;
ne[tot]=head[x];
head[x]=tot;deg[y]++;
}
long long a[21],b[21];
const long long md=998244353;
inline long long pwr(long long x,long long y){
long long res=1;
while(y){
if(y&1)res=res*x%md;
x=x*x%md;y>>=1;
}return res;
}
void dfs(int x,int fi,int S){
if((S>>(x-1))&1)return ;
long long tota=0,totb=0;
for(int i=head[x];i;i=ne[i]){
int u=ver[i];
if(u==fi)continue;
dfs(u,x,S);
tota=(tota+a[u])%md;totb=(totb+b[u])%md;
}
a[x]=pwr(deg[x]-tota,md-2);
b[x]=(deg[x]+totb)%md*a[x]%md;
}
long long dp[1<<18];
int cnt[1<<18];
int main(){
scanf("%d%d%d",&n,&q,&rt);
for(int i=1;i<n;i++){
int x,y;
scanf("%d%d",&x,&y);
link(x,y);link(y,x);
}//puts("111");
for(int s=1;s<(1<<n);s++){
cnt[s]=cnt[s>>1]+(s&1);
for(int i=1;i<=n;i++)a[i]=b[i]=0;
dfs(rt,rt,s);dp[s]=(cnt[s]&1?1:-1)*b[rt];
}//puts("222");
for(int i=0;i<n;i++){
for(int s=0;s<(1<<n);s++){
if((s>>i)&1)continue;
dp[s|(1<<i)]=(dp[s|(1<<i)]+dp[s])%md;
}
}
while(q--){
int k,s=0;
scanf("%d",&k);
while(k--){
int x;scanf("%d",&x);
s|=(1<<(x-1));
}printf("%lld\n",(dp[s]+md)%md);
}
return 0;
}
Min-max 容斥与 kth 容斥的更多相关文章
- 在一定[min,max]区间,生成n个不重复的随机数的封装函数
引:生成一个[min,max]区间的一个随机数,随机数生成相关问题参考→链接 var ran=parseInt(Math.random()*(max-min+1)+min); //生成一个[min,m ...
- LINQ to SQL Count/Sum/Min/Max/Avg Join
public class Linq { MXSICEDataContext Db = new MXSICEDataContext(); // LINQ to SQL // Count/Sum/Min/ ...
- 2.10 用最少次数寻找数组中的最大值和最小值[find min max of array]
[本文链接] http://www.cnblogs.com/hellogiser/p/find-min-max-of-array.html [题目] 对于一个由N个整数组成的数组,需要比较多少次才能把 ...
- LINQ Count/Sum/Min/Max/Avg
参考:http://www.cnblogs.com/peida/archive/2008/08/11/1263384.html Count/Sum/Min/Max/Avg用于统计数据,比如统计一些数据 ...
- 【转载】:【C++跨平台系列】解决STL的max()与numeric_limits::max()和VC6 min/max 宏冲突问题
http://www.cnblogs.com/cvbnm/articles/1947743.html 多年以前,Microsoft 幹了一件比 #define N 3 還要蠢的蠢事,那就是在 < ...
- LINQ to SQL 语句(3) 之 Count/Sum/Min/Max/Avg
LINQ to SQL 语句(3) 之 Count/Sum/Min/Max/Avg [1] Count/Sum 讲解 [2] Min 讲解 [3] Max 讲解 [4] Average 和 Agg ...
- [转]LINQ语句之Select/Distinct和Count/Sum/Min/Max/Avg
在讲述了LINQ,顺便说了一下Where操作,这篇开始我们继续说LINQ语句,目的让大家从语句的角度了解LINQ,LINQ包括LINQ to Objects.LINQ to DataSets.LINQ ...
- 动态规划——min/max的单调性优化总结
一般形式: $max\{min(ax+by+c,dF(x)+eG(y)+f)\},其中F(x)和G(y)是单调函数.$ 或 $min\{max(ax+by+c,dF(x)+eG(y)+f)\},其中F ...
- Hive函数:SUM,AVG,MIN,MAX
转自:http://lxw1234.com/archives/2015/04/176.htm,Hive分析窗口函数(一) SUM,AVG,MIN,MAX 之前看到大数据田地有关于max()over(p ...
随机推荐
- 超酷!!HTML5 Canvas 水流样式 Loading 动画
今天我们要分享另外一款基于HTML5 Canvas的液体流动样式Loading加载动画,这款Loading动画在加载时会呈现液体流动的动画效果,并且由于和背景颜色的对比,也略微呈现发光的动画效果. 效 ...
- 深入理解vue 修饰符sync【 vue sync修饰符示例】
在说vue 修饰符sync前,我们先看下官方文档:vue .sync 修饰符,里面说vue .sync 修饰符以前存在于vue1.0版本里,但是在在 2.0 中移除了 .sync .但是在 2.0 发 ...
- 有意思的CVE-2022-0337复现
前言 前两天在刷tw,看到了个比较有意思的一个CVE漏洞,价值奖励是10000美刀,比较好奇的是价值10000美刀的漏洞是什么样子的,漏洞利用就是需要在浏览器中进行用户交互才能触发该漏洞,但由于 Wi ...
- SpringBoot项目刚刚创建就报异常,Failed to configure a DataSource: 'url' attribute is not specified and no embedded 的解决办法
错误信息: Description: Failed to configure a DataSource: 'url' attribute is not specified and no embedde ...
- InnoDB的逻辑存储结构是什么,表空间组成包括哪些?
一.表空间 在InnoDB中我们创建的表还有对应的索引数据都存储在扩展名为.ibd 的文件中,这个文件路径可以先通过查mysql变量datadir来得到,然后进入对应的数据库名目录,会看到很多ibd, ...
- 干货|SQL语句大全,所有的SQL都在这里了(建议收藏)
一个执着于技术的公众号 一.基础 1.登录数据库 mysql -uroot -p123123 2.创建数据库 create database <数据库名> 3.删除数据库 drop dat ...
- 腾讯tbs 内存泄露
一.背景 TBS(腾讯浏览服务)是腾讯提供的移动端webview体验的整套解决方案(https://x5.tencent.com/docs/index.html),可以用于移动端加载doc.xls.p ...
- Python自定义排序及我实际遇到的一些题目实例
写在前面,本文主要介绍Python基础排序和自定义排序的一些规则,如果都比较熟悉,可以直接翻到第三节,看下实际的笔试面试题中关于自定义排序的应用. 一.基础排序 排序是比较基础的算法,与很多语言一样, ...
- Android开发的开始
Android 软件 手机软件哦,目前只有一层外壳,进一步功能等待开发. 下载地址
- 【PyHacker】编写WAF指纹探测与Sqlmap相结合
使用Python编写探测WAF指纹脚本,再结合到Sqlmap中,这样以后再探测网站时,如果识别到此WAF指纹,就会显示出来.本文属于巡安似海PyHacker系列课程 编写探测识别WAF脚本 00x ...