题目链接

题意

给出一棵 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)的更多相关文章

  1. Codeforces 543D. Road Improvement (树dp + 乘法逆元)

    题目链接:http://codeforces.com/contest/543/problem/D 给你一棵树,初始所有的边都是坏的,要你修复若干边.指定一个root,所有的点到root最多只有一个坏边 ...

  2. Palindrome Partition CodeForces - 932G 回文树+DP+(回文后缀的等差性质)

    题意: 给出一个长度为偶数的字符串S,要求把S分成k部分,其中k为任意偶数,设为a[1..k],且满足对于任意的i,有a[i]=a[k-i+1].问划分的方案数. n<=1000000 题解: ...

  3. Codeforces 219D. Choosing Capital for Treeland (树dp)

    题目链接:http://codeforces.com/contest/219/problem/D 树dp //#pragma comment(linker, "/STACK:10240000 ...

  4. (纪念第一道完全自己想的树DP)CodeForces 219D Choosing Capital for Treeland

    Choosing Capital for Treeland time limit per test 3 seconds memory limit per test 256 megabytes inpu ...

  5. 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 ...

  6. 边双连通缩点+树dp 2015 ACM Arabella Collegiate Programming Contest的Gym - 100676H

    http://codeforces.com/gym/100676/attachments 题目大意: 有n个城市,有m条路,每条路都有边长,如果某几个城市的路能组成一个环,那么在环中的这些城市就有传送 ...

  7. Manthan, Codefest 16 C. Spy Syndrome 2 字典树 + dp

    C. Spy Syndrome 2 题目连接: http://www.codeforces.com/contest/633/problem/C Description After observing ...

  8. [BZOJ 3625] [Codeforces 438E] 小朋友的二叉树 (DP+生成函数+多项式开根+多项式求逆)

    [BZOJ 3625] [Codeforces 438E] 小朋友的二叉树 (DP+生成函数+多项式开根+多项式求逆) 题面 一棵二叉树的所有点的点权都是给定的集合中的一个数. 让你求出1到m中所有权 ...

  9. CodeForces #369 C. Coloring Trees DP

    题目链接:C. Coloring Trees 题意:给出n棵树的颜色,有些树被染了,有些没有.现在让你把没被染色的树染色.使得beauty = k.问,最少使用的颜料是多少.   K:连续的颜色为一组 ...

随机推荐

  1. Python-Requests库的安装和调用

    #使用pip或者pip3安装requests库pip3 install requests #requests库:python #输入python进入命令行模式在cmd命令行中依次运行以下代码,或者直接 ...

  2. 移动端1px的适配问题

    先看个概念: window.devicePixelRatio = 物理像素 / dips(独立像素) window.devicePixelRatio是设备的物理像素和独立像素的比例,可以叫设备像素比. ...

  3. DEX文件解析---2、Dex文件checksum(校验和)解析

    一.checksum介绍     checksum(校验和)是DEX位于文件头部的一个信息,用来判断DEX文件是否损坏或者被篡改,它位于头部的0x08偏移地址处,占用4个字节,采用小端序存储.     ...

  4. 什么是SSH与SSH客户端

    1.什么是SSH? SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定:SSH 为建立在应用层和传输层基础上的安全协议.SS ...

  5. 【.net core】电商平台升级之微服务架构应用实战

    一.前言 这篇文章本来是继续分享IdentityServer4 的相关文章,由于之前有博友问我关于微服务相关的问题,我就先跳过IdentityServer4的分享,进行微服务相关的技术学习和分享.微服 ...

  6. aireplay包注入攻击

    reaver爆破WPS PIN码: airodump-ng wlan0 reaver -i wlan0 -b D0:76:E7:51:2A:78 -vv   macchanger更改MAC地址: ma ...

  7. Mac OS X 10.13上 安装odoo 11.0开发环境

    0.准备假设homebrew已经安装好没安装的需要先安装,见下面链接http://brew.sh/ 1.安装PostgreSQL$ brew tap homebrew/services$ brew i ...

  8. 每天都在用 Map,这些核心技术你知道吗?

    本篇文章站在多线程并发安全角度,带你了解多线程并发使用 HashMap 将会引发的问题,深入学习 ConcurrentHashMap ,带你彻底掌握这些核心技术. 全文摘要: HashMap 核心技术 ...

  9. GPU Skinning不生效问题

    1)GPU Skinning不生效问题2)勾选凸包报的警告问题3)Unity 2019 图片压缩格式选择4)Android Export打包对压缩的影响5)Android内存中的Unknown部分泄漏 ...

  10. 关于LaTex的安装

    第一次写博客,有点生疏,但是想把具体安装的流程自我的汇总一下,毕竟我总是忘记,万一下一次要用的时候又要弄很久,就当经验吧. 其实是因为这个新型冠状病毒不能出门,也没开学,想找点事情做一做 这个博客不知 ...