LINK

对于节点 u u u来说(分别对应状态 0 , 1 , 2 0,1,2 0,1,2)

定义 f [ i ] [ 0 / 1 / 2 ] f[i][0/1/2] f[i][0/1/2]表示当 i i i分别满足以下三个条件时,子树内节点全部符合要求时的答案

Ⅰ.如果删去这个节点,那么 u u u一定满足条件

Ⅱ.如果不删去 u u u,且所有儿子被删掉.那么此时 u u u还没满足条件,需要父亲也不被删去

Ⅲ.如果不删去 u u u,且所有儿子中至少有一个没删掉.那么 u u u满足条件,父亲怎样无所谓

可以发现这个设计非常合理,比如

f [ u ] [ 0 ] = ∏ v ∈ s o n u f [ v ] [ 0 ] + f [ v ] [ 2 ] f[u][0]=\prod\limits_{v\in son_u}f[v][0]+f[v][2] f[u][0]=v∈sonu​∏​f[v][0]+f[v][2]

f [ u ] [ 1 ] = ∏ v ∈ s o n u f [ v ] [ 0 ] f[u][1]=\prod\limits_{v\in son_u}f[v][0] f[u][1]=v∈sonu​∏​f[v][0]

但是发现转移 f [ u ] [ 2 ] f[u][2] f[u][2]时有点变化,我们可以采用容斥的办法

也就是所有方案数-不合法的方案数,即为

f [ u ] [ 2 ] = ∏ v ∈ s o n u ( f [ v ] [ 0 ] + f [ v ] [ 1 ] + f [ v ] [ 2 ] ) − ∏ v ∈ s o n u f [ v ] [ 0 ] f[u][2]=\prod\limits_{v\in son_u}(f[v][0]+f[v][1]+f[v][2])-\prod\limits_{v\in son_u}f[v][0] f[u][2]=v∈sonu​∏​(f[v][0]+f[v][1]+f[v][2])−v∈sonu​∏​f[v][0]

显然 f [ r o o t ] [ 0 ] + f [ r o o t ] [ 2 ] f[root][0]+f[root][2] f[root][0]+f[root][2]即是答案

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod = 998244353;
const int maxn = 1e5+10;
int n,f[maxn][3];
vector<int>vec[maxn];
/*
f[i][0]表示自己被删掉
f[i][1]表示自己没删去,且没有儿子和自己相连
f[i][2]表示自己没删去,且至少有一个儿子和自己相连
*/
void dfs(int u,int fa)
{f[u][0] = f[u][1] = f[u][2] = 1;for(auto v:vec[u] ){if( v==fa )   continue;dfs( v,u );f[u][0] = ( f[v][0]+f[v][2] )%mod*f[u][0]%mod;f[u][1] = f[u][1]*f[v][0]%mod;f[u][2] = ( f[v][0]+f[v][1]+f[v][2] )%mod*f[u][2]%mod; }f[u][2] = ( f[u][2]-f[u][1] )%mod;//f[u][2]为总方案数-所有儿子都被删去的方案数
}
signed main()
{int t; cin >> t;while( t-- ){cin >> n;for(int i=1;i<n;i++){int l,r; scanf("%lld%lld",&l,&r);vec[l].push_back( r ), vec[r].push_back( l );  }   dfs( 1,0 );cout << (( f[1][0]+f[1][2] )%mod+mod)%mod << endl;for(int i=1;i<=n;i++) vec[i].clear();}
}

The 15th Chinese Northeast Collegiate C. Vertex Deletion(树形dp)相关推荐

  1. The 15th Chinese Northeast Collegiate Programming Contest部分题解

    The 15th Chinese Northeast Collegiate Programming Contest 目录 E. Easy Math Problem 题目思路 题目代码 I. Takea ...

  2. The 15th Chinese Northeast Collegiate Programming Contest 题解(CCPC压力测试?

    CCPC压力测试用了这套题,和一个队友一起搞了.初期签到还算比较顺利,还碰到了挺多有意思的题目,做的好爽,但还是犯了很多低级错误,对于杭电要时时刻刻关同步或者scanf,并且写代码还是要仔细些. A. ...

  3. The 15th Chinese Northeast Collegiate Programming Contest

    linkkkkkk 1001 Matrix 题意: 用 [ 1 , n 2 ] [1,n^2] [1,n2]的数填 n ∗ n n*n n∗n的矩阵,每个数字只能用一次,记 a i a_i ai​表示 ...

  4. 【21.10.24】The 15th Chinese Northeast Collegiate Programming Contest题解

    A. Matrix(组合数+数学) #include <bits/stdc++.h> using namespace std; #define mod 998244353 ll fac[1 ...

  5. The 15th Chinese Northeast Collegiate H - Loneliness(思维,构造)

    LINK 注意 左上角是 ( 1 , 1 ) (1,1) (1,1),右下角是 ( n , n ) (n,n) (n,n) 如果无脑走下去,会乘上一个 2 n − 1 2^{n-1} 2n−1,早就爆 ...

  6. The 15th Chinese Northeast Collegiate Programming Contest D题

    题目链接 大致题意: 给你一段含n个数字的序列,对于这段序列可以有m次操作. 操作有两种类型: 1.(1,L,R)表示将(L,R)区间的每个数加自身的lowbit值(若一个数为x,则其lowbit值为 ...

  7. The 15th Chinese Northeast Collegiate Programming Contest K.City

    目录 题目: 思路:​​​​​​​ 代码: 题目: 原题: Lucida occupies n cities connected by m undirected roads, and each roa ...

  8. The 15th Chinese Northeast Collegiate Programming Contest - K.City

    虽然不难,但是感觉很有意思的一道题,下面有几个点感觉还是挺妙的: · 并查集只能加边不能减边: ·对数据进行离线处理,方便我们进行排序处理(后面会解释): 首先数据的范围很大,如果我们每做一次判断都要 ...

  9. The 15th Chinese Northeast Collegiate Programming Contest. A Matrix

    题意: $$用[1,2,...,n^2]填n\times n的矩阵,每个数字只能用一次,记:a_i为第i行的最小值:$$ $$S=a_1,a_2,...,a_n\cap{1,2,...,n};$$ $ ...

最新文章

  1. Educational Codeforces Round 54
  2. 解决数据库读写分离(转)
  3. Science:中科院微生物所向华/李明组揭示护卫CRISPR-Cas的全新毒素-抗毒素RNA系统
  4. 前Duolingo秦龙博士归国创业:情定K12个性化学习
  5. win7 将文件的背景色改为绿色
  6. 20个开源项目托管站点推荐
  7. 十进制转十六进制c语言_蓝桥杯十六进制转十进制,十进制转十六进制精简版(C++)...
  8. python for net_转:.NET 4.0 下使用 Python for .NET
  9. ActiveXObject ADODB.Stream封装
  10. macbook更新系统服务器,苹果电脑如何升级系统_苹果电脑怎么更新版本-win7之家...
  11. word论文排版操作
  12. appium+python 自动化测试:解决安卓系统双击问题——获取微信聊天内容
  13. zabbix邮箱告警
  14. RTL88X2BU网卡驱动失效,重新安装
  15. 博主称抖音屏蔽很多关键词致谐音梗大流行
  16. aspen模拟蒸发器_用Aspen Plus设计蒸发器例题
  17. c语言程序设计冒泡排序在哪,C语言程序设计冒泡排序教学案例杨进
  18. C# Socket模拟发送接收
  19. UVa 10507 - Waking up brain
  20. nexus7由Ubuntu刷回原厂安卓系统

热门文章

  1. 青少年软件编程(图形化)等级考试一级:2022.9试卷和答案
  2. ADAMS中相关Part/Material等重命名(Rename)
  3. BIOS知识点--修改SMBIOS
  4. 贝塞尔(贝兹尔)曲线介绍
  5. 【电子量产工具】1.显示系统
  6. 简历不要随意给猎头!他们会胡乱投递,影响你之后求职!
  7. 华硕本本U盘启动不了看这里
  8. 绿山回转波层析反演静校正
  9. 文本自动摘要任务的初步总结
  10. 等级保护认证费用详细_等保费用标准