Codeforces 1067E - Random Forest Rank(找性质+树形 dp)
一道不知道能不能算上自己 AC 的 D1E(?)
挺有意思的结论题,结论倒是自己猜出来了,可根本不会证(
开始搬运题解 ing:
碰到这样的题我们肯定要考虑一个图邻接矩阵的秩是什么。显然根据我们幼儿园就学过的线性代数,对于一个矩阵 \(A\) 而言,其行列式就是其最大的子式满足其行列式不等于 \(0\),也就是任取若干行 & 若干列,它们的交组成的矩阵行列式不等于 \(0\),不难发现对于一个森林的邻接矩阵而言,对于任意一个子式,如果它的行列式不等于 \(0\),那么它的行、列下标的并组成的主子式的行列式肯定也非零,因此我们只用考虑其主子式就行了,而主子式显然可以看作导出子图的邻接矩阵,因此我们接下来只需探究什么样的矩阵行列式非零。
考虑行列式的展开式:
\]
显然对于后面的 \(\prod\) 而言,只有 \((i,p_i)\) 存在边相连时 \(A_{i,p_i}\) 才非零,而由于图无自环,如果 \(\exists i,s.t.i=p_i\) 必然有 \(p\) 对 \(\det A\) 的贡献为 \(0\),同理,如果 \(p\) 存在一个大小 \(\ge 3\) 的置换环,那么由于图是一个森林,不可能这些点之间两两相邻的点都存在边,对 \(\det A\) 的贡献也为 \(0\)。也就是说只有 \(p\) 中所有置换环大小都为二,也就是我们选出的是一个形如的 \((i,p_i)\) 的完美匹配,而由于图是一个森林,因此完美匹配个数肯定 \(\le 1\),具体构造方案就是从叶子开始贪心地匹配,如果匹配不了就不存在完美匹配,因此 \(\det A\) 非零的充要条件是图存在完美匹配,因此我们可以得到这样一个性质:
Observation. 对于图 \(G\) 而言,\(G\) 邻接矩阵的秩是 \(G\) 最大匹配的大小 \(\times 2\)。
有了这个性质之后就可以 DP 了。\(way_{i,0/1}\) 表示钦定以 \(i\) 为根的子树内的边,并且在最大匹配中 \(i\) 选/没选的方案数,\(dp_{i,0/i}\) 表示钦定以 \(i\) 为根的子树内的边,并且在最大匹配中 \(i\) 选/没选的所有方案中最大匹配个数的总和。转移就分 \((i,j)\) 的边选/不选,然后分类讨论一下即可,复杂度 \(\mathcal O(n)\)
const int MAXN=5e5;
const int MOD=998244353;
int n,hd[MAXN+5],to[MAXN*2+5],nxt[MAXN*2+5],ec=0;
void adde(int u,int v){to[++ec]=v;nxt[ec]=hd[u];hd[u]=ec;}
int dp[MAXN+5][2],way[MAXN+5][2];
void dfs(int x,int f){
way[x][0]=1;
for(int e=hd[x];e;e=nxt[e]){
int y=to[e];if(y==f) continue;dfs(y,x);
static int tmp_dp[2]={0},tmp_way[2]={0};
memset(tmp_dp,0,sizeof(tmp_dp));
memset(tmp_way,0,sizeof(tmp_way));
tmp_way[0]=(1ll*way[x][0]*(way[y][0]+way[y][1]))%MOD;
tmp_dp[0]=(1ll*dp[x][0]*(way[y][0]+way[y][1])+1ll*(dp[y][0]+dp[y][1])*way[x][0])%MOD;
tmp_way[1]=(1ll*way[x][1]*(way[y][0]+way[y][1])*2)%MOD;
tmp_dp[1]=2ll*(1ll*dp[x][1]*(way[y][0]+way[y][1])+1ll*(dp[y][0]+dp[y][1])*way[x][1])%MOD;
tmp_way[0]=(tmp_way[0]+1ll*way[x][0]*way[y][1])%MOD;
tmp_dp[0]=(tmp_dp[0]+1ll*dp[x][0]*way[y][1]+1ll*dp[y][1]*way[x][0])%MOD;
tmp_way[1]=(tmp_way[1]+1ll*way[x][0]*way[y][0])%MOD;
tmp_dp[1]=(tmp_dp[1]+1ll*dp[x][0]*way[y][0]+1ll*dp[y][0]*way[x][0]+1ll*way[x][0]*way[y][0])%MOD;
for(int i=0;i<2;i++) dp[x][i]=tmp_dp[i],way[x][i]=tmp_way[i];
}
// printf("%d %d %d %d %d\n",x,dp[x][0],dp[x][1],way[x][0],way[x][1]);
}
int main(){
scanf("%d",&n);
for(int i=1,u,v;i<n;i++) scanf("%d%d",&u,&v),adde(u,v),adde(v,u);
dfs(1,0);printf("%d\n",2ll*(dp[1][0]+dp[1][1])%MOD);
return 0;
}
Codeforces 1067E - Random Forest Rank(找性质+树形 dp)的更多相关文章
- CodeForces 1067E Random Forest Rank
题意 给定一棵 \(n\) 个节点的树,每条边有 \(\frac{1}{2}\) 的概率出现,这样会得出一个森林,求这个森林的邻接矩阵 \(A\) 的秩 \(\operatorname{rank} A ...
- Codeforces 348E 树的中心点的性质 / 树形DP / 点分治
题意及思路:http://ydc.blog.uoj.ac/blog/12 在求出树的直径的中心后,以它为根,对于除根以外的所有子树,求出子树中的最大深度,以及多个点的最大深度的lca,因为每个点的最长 ...
- CF1067E Random Forest Rank
CF1067E Random Forest Rank 可以证明: 一个树的邻接矩阵的秩,等于最大匹配数*2(虽然我只能证明下界是最大匹配) 而树的最大匹配可以贪心, 不妨用DP模拟这个过程 f[x][ ...
- Codeforces 1097G Vladislav and a Great Legend [树形DP,斯特林数]
洛谷 Codeforces 这题真是妙的很. 通过看题解,终于知道了\(\sum_n f(n)^k\)这种东西怎么算. update:经过思考,我对这题有了更深的理解,现将更新内容放在原题解下方. ...
- Codeforces 980F Cactus to Tree 仙人掌 Tarjan 树形dp 单调队列
原文链接https://www.cnblogs.com/zhouzhendong/p/CF980F.html 题目传送门 - CF980F 题意 给定一个 $n$ 个节点 $m$ 条长为 $1$ 的边 ...
- codeforces 816 E. Karen and Supermarket(树形dp)
题目链接:http://codeforces.com/contest/816/problem/E 题意:有n件商品,每件有价格ci,优惠券di,对于i>=2,使用di的条件为:xi的优惠券需要被 ...
- codeforces 161 D. Distance in Tree(树形dp)
题目链接:http://codeforces.com/problemset/problem/161/D 题意:给出一个树,问树上点到点的距离为k的一共有几个. 一道简单的树形dp,算是一个基础题. 设 ...
- [CQOI2009]叶子的染色【性质+树形Dp】
Online Judge:Bzoj1304,Luogu P3155 Label:无根树,树形Dp 题目描述 给定一棵\(N\)个节点的无根树,它一共有\(K\)个叶子节点.你可以选择一个度数大于1的节 ...
- Codeforces 1606F - Tree Queries(虚树+树形 dp)
Codeforces 题面传送门 & 洛谷题面传送门 显然我们选择删除的点连同 \(u\) 会形成一个连通块,否则我们如果选择不删除不与 \(u\) 在同一连通块中的点,答案一定更优. 注意到 ...
随机推荐
- javascript-jquery介绍
jquery优势 1.轻量级 2.强大的选择器 3.出色的DOM封装 4.可靠的事件处理机制 5.完善的Ajax 6.不污染顶级变量 7.出色的浏览器兼容 8.链式操作方式 9.隐式迭代 10.行为层 ...
- LiveVideoStackCon2021 北京站专访:从上云到创新,视频云的新技术、新场景
伴随着视频技术的进步和标准的迭代,视频产业从模拟进入到数字时代,完成了从电影电视到互联网的媒介转换,并且衍生出了超高清.3D.AR/VR 等多种创新形态.特别是在后疫情的当下,我们可以看到音视频技术领 ...
- Beta-技术规格说明书
项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 团队项目-计划-功能规格说明书 一.架构与技术栈 1.整体架构 本项目的整体架构如上图所示.下面我们将对涉及 ...
- [no code][scrum meeting] Alpha 6
项目 内容 会议时间 2020-04-13 会议主题 后端技术细节分析 会议时长 30min 参会人员 PM+后端组成员 $( "#cnblogs_post_body" ).cat ...
- BUAA软件工程个人项目作业
BUAA软件工程个人项目作业 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人项目作业 我在这个课程的目标是 学习软件开发的流程 这个作业在哪 ...
- springboot多配置环境
在我们的开发过程中,经常会有多套配置环境,比如开发环境(dev),测试环境(test),生产环境(prod)等,在各个环境中我们需要使用到不同的配置,那么在springboot中是如何做到的呢? 1. ...
- 源码解析-Abp vNext丨分布式事件总线DistributedEventBus
前言 上一节咱们讲了LocalEventBus,本节来讲本地事件总线(DistributedEventBus),采用的RabbitMQ进行实现. Volo.Abp.EventBus.RabbitMQ模 ...
- 面试官问我JVM内存结构,我真的是
面试官:今天来聊聊JVM的内存结构吧? 候选者:嗯,好的 候选者:前几次面试的时候也提到了:class文件会被类加载器装载至JVM中,并且JVM会负责程序「运行时」的「内存管理」 候选者:而JVM的内 ...
- JS基础面试
1. JS是高级语言弱类型语言 脚本语言 1.1高级语言我们写完的代码不能直接执行,要先经过js引擎翻译成0101这种机器语言才能执行 1.2 弱类型语言变量可以在前一行设置为一个数字,下一行修改为一 ...
- ESXi 6.7 的https服务挂掉处理方法 503 Service Unavailable
首先进入EXSi开启SSH(ESXi的主机控制台,非web控制台,是安装esxi的控制台) 然后 /etc/init.d/hostd status 显示已停止, 使用 /etc/init.d/host ...