Codeforces 1332F - Independent Set(树dp)
题意
给出一棵 n 个点的树, 求它的所有非空诱导子图的独立集种类数之和, 对 998244353 取模. n ≤ 3e5.
题解
不妨假设在独立集中的点被染色成 1, 其余不染色; 由于不在诱导子图中的点不影响答案, 不妨也考虑进来, 也不染色. 问题转化为: 对这棵树的部分节点染色, 然后进行删边, 保证删边后没有相邻的点同时被染色, 并且不能有孤立的被染色的点存在, 问结果的情况种类数.
问题转化后就可以进行树 dp 了. 定义以 x 为根的子树在以下情况的方案数
- \(dp[x][0]: 点 x 不染色\)
- \(dp[x][1]: 点 x 染色\)
- \(dp[x][2]: 点 x 染色 且其与儿子的边都删去(非法情况)\)
分类讨论儿子的染色情况和删边与否, 得到转态转移方程
- \(dp[x][0] = \prod {dp[son][0] * 2 + dp[son][1] * 2 - dp[son][2]}\)
- \(dp[x][1] = \prod {dp[son][0] * 2 + dp[son][1] - dp[son][2]}\)
- \(dp[x][2] = \prod {dp[son][0] + dp[son][1] - dp[son][2]}\)
注意题目要求诱导子图是非空的, 所以最后答案要减 1, 这对应问题转化后所有边都删去的情况.
代码
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define inc(i, l, r) for (int i = l; i <= r; i++)
const int maxn = 1e6 + 5;
const int mod = 998244353;
ll dp[maxn][3];
int n, u, v;
vector<int> g[maxn];
void dfs(int x, int par) {
inc(i, 0, 2) dp[x][i] = 1;
for (int son : g[x]) {
if (son != par) {
dfs(son, x);
dp[x][0] =
dp[x][0] *
((dp[son][0] * 2 + dp[son][1] * 2 - dp[son][2] + mod) % mod) %
mod;
dp[x][1] =
dp[x][1] *
((dp[son][0] * 2 + dp[son][1] - dp[son][2] + mod) % mod) % mod;
dp[x][2] = dp[x][2] *
((dp[son][0] + dp[son][1] - dp[son][2] + mod) % mod) %
mod;
}
}
}
int main() {
cin >> n;
inc(i, 1, n - 1) {
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
dfs(1, -1);
cout << (dp[1][0] + dp[1][1] - dp[1][2] - 1 + mod) % mod << "\n";
}
Codeforces 1332F - Independent Set(树dp)的更多相关文章
- Codeforces 543D. Road Improvement (树dp + 乘法逆元)
题目链接:http://codeforces.com/contest/543/problem/D 给你一棵树,初始所有的边都是坏的,要你修复若干边.指定一个root,所有的点到root最多只有一个坏边 ...
- Palindrome Partition CodeForces - 932G 回文树+DP+(回文后缀的等差性质)
题意: 给出一个长度为偶数的字符串S,要求把S分成k部分,其中k为任意偶数,设为a[1..k],且满足对于任意的i,有a[i]=a[k-i+1].问划分的方案数. n<=1000000 题解: ...
- Codeforces 219D. Choosing Capital for Treeland (树dp)
题目链接:http://codeforces.com/contest/219/problem/D 树dp //#pragma comment(linker, "/STACK:10240000 ...
- (纪念第一道完全自己想的树DP)CodeForces 219D Choosing Capital for Treeland
Choosing Capital for Treeland time limit per test 3 seconds memory limit per test 256 megabytes inpu ...
- CF456D A Lot of Games (字典树+DP)
D - A Lot of Games CF#260 Div2 D题 CF#260 Div1 B题 Codeforces Round #260 CF455B D. A Lot of Games time ...
- 边双连通缩点+树dp 2015 ACM Arabella Collegiate Programming Contest的Gym - 100676H
http://codeforces.com/gym/100676/attachments 题目大意: 有n个城市,有m条路,每条路都有边长,如果某几个城市的路能组成一个环,那么在环中的这些城市就有传送 ...
- Manthan, Codefest 16 C. Spy Syndrome 2 字典树 + dp
C. Spy Syndrome 2 题目连接: http://www.codeforces.com/contest/633/problem/C Description After observing ...
- [BZOJ 3625] [Codeforces 438E] 小朋友的二叉树 (DP+生成函数+多项式开根+多项式求逆)
[BZOJ 3625] [Codeforces 438E] 小朋友的二叉树 (DP+生成函数+多项式开根+多项式求逆) 题面 一棵二叉树的所有点的点权都是给定的集合中的一个数. 让你求出1到m中所有权 ...
- CodeForces #369 C. Coloring Trees DP
题目链接:C. Coloring Trees 题意:给出n棵树的颜色,有些树被染了,有些没有.现在让你把没被染色的树染色.使得beauty = k.问,最少使用的颜料是多少. K:连续的颜色为一组 ...
随机推荐
- Python-Requests库的安装和调用
#使用pip或者pip3安装requests库pip3 install requests #requests库:python #输入python进入命令行模式在cmd命令行中依次运行以下代码,或者直接 ...
- 移动端1px的适配问题
先看个概念: window.devicePixelRatio = 物理像素 / dips(独立像素) window.devicePixelRatio是设备的物理像素和独立像素的比例,可以叫设备像素比. ...
- DEX文件解析---2、Dex文件checksum(校验和)解析
一.checksum介绍 checksum(校验和)是DEX位于文件头部的一个信息,用来判断DEX文件是否损坏或者被篡改,它位于头部的0x08偏移地址处,占用4个字节,采用小端序存储. ...
- 什么是SSH与SSH客户端
1.什么是SSH? SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定:SSH 为建立在应用层和传输层基础上的安全协议.SS ...
- 【.net core】电商平台升级之微服务架构应用实战
一.前言 这篇文章本来是继续分享IdentityServer4 的相关文章,由于之前有博友问我关于微服务相关的问题,我就先跳过IdentityServer4的分享,进行微服务相关的技术学习和分享.微服 ...
- aireplay包注入攻击
reaver爆破WPS PIN码: airodump-ng wlan0 reaver -i wlan0 -b D0:76:E7:51:2A:78 -vv macchanger更改MAC地址: ma ...
- Mac OS X 10.13上 安装odoo 11.0开发环境
0.准备假设homebrew已经安装好没安装的需要先安装,见下面链接http://brew.sh/ 1.安装PostgreSQL$ brew tap homebrew/services$ brew i ...
- 每天都在用 Map,这些核心技术你知道吗?
本篇文章站在多线程并发安全角度,带你了解多线程并发使用 HashMap 将会引发的问题,深入学习 ConcurrentHashMap ,带你彻底掌握这些核心技术. 全文摘要: HashMap 核心技术 ...
- GPU Skinning不生效问题
1)GPU Skinning不生效问题2)勾选凸包报的警告问题3)Unity 2019 图片压缩格式选择4)Android Export打包对压缩的影响5)Android内存中的Unknown部分泄漏 ...
- 关于LaTex的安装
第一次写博客,有点生疏,但是想把具体安装的流程自我的汇总一下,毕竟我总是忘记,万一下一次要用的时候又要弄很久,就当经验吧. 其实是因为这个新型冠状病毒不能出门,也没开学,想找点事情做一做 这个博客不知 ...