(特判$n=1$的情况)

当确定权值和操作后,如何判定是否合法——

考虑一个度为1的节点,对其权值即其对应边的边操作分类讨论:

$1\or$,显然只需要最后选择这条边即可,一定合法

$1\and$或$0\or$,显然这条边没有意义,不妨直接选择

$0\and$,将最终的结果变为0,显然不如初始的值为0(结果仍为0也不劣),因此也不妨直接选择

综上,有以下策略:若存在$1\or$的情况一定合法,否则不断选择某一条度为1的点对应的边即可

然后,进行树形dp即可,令$f_{k,0/1/2}$表示以$k$为根的子树中最终$k$的权值为0/1且未出现$1\or$的情况和出现$1\or$的方案数(仅考虑子树内部),转移即
$$
\begin{cases}f_{k,0}=f_{k,0}(2f_{son,0}+f_{son,1})+f_{k,1}f_{son,0}\\f_{k,1}=f_{k,1}(f_{son,0}+f_{son,1})\\f_{k,2}=(f_{k,0}+f_{k,1})(f_{son,1}+2f_{son,2})+2f_{k,2}(f_{son,0}+f_{son,1}+f_{son,2})\end{cases}
$$
初始状态为$f_{k,0}=f_{k,1}=1$,最终答案为$f_{rt,1}+f_{rt,2}$

时间复杂度为$o(n)$,可以通过

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 100005
4 #define mod 998244353
5 #define ll long long
6 struct Edge{
7 int nex,to;
8 }edge[N<<1];
9 int E,n,x,y,ans,head[N];
10 ll g[3],f[N][3];
11 void add(int x,int y){
12 edge[E].nex=head[x];
13 edge[E].to=y;
14 head[x]=E++;
15 }
16 void dfs(int k,int fa){
17 f[k][0]=f[k][1]=1;
18 for(int i=head[k];i!=-1;i=edge[i].nex){
19 int v=edge[i].to;
20 if (v!=fa){
21 dfs(v,k);
22 memcpy(g,f[k],sizeof(g));
23 f[k][0]=(g[0]*(2*f[v][0]+f[v][1])+g[1]*f[v][0])%mod;
24 f[k][1]=g[1]*(f[v][0]+f[v][1])%mod;
25 f[k][2]=((g[0]+g[1])*(f[v][1]+2*f[v][2])%mod+2*g[2]*(f[v][0]+f[v][1]+f[v][2]))%mod;
26 }
27 }
28 }
29 int main(){
30 scanf("%d",&n);
31 memset(head,-1,sizeof(head));
32 for(int i=2;i<=n;i++){
33 scanf("%d%d",&x,&y);
34 add(x,y);
35 add(y,x);
36 }
37 dfs(1,0);
38 printf("%d",(f[1][1]+f[1][2])%mod);
39 }

[atARC121F]Logical Operations on Tree的更多相关文章

  1. C语言之Bit-wise Operation和Logical Operation

    首先第一点:十六进制位运算和逻辑运算 都是先转化二进制,后输出结果(十六进制,二或十)Bit-Wise Operations (位运算)包括:& 按位与 | 按位或 ^ 按位异或 ~ 取反 & ...

  2. OpenCV Mat&Operations

    /*M/////////////////////////////////////////////////////////////////////////////////////////// IMPOR ...

  3. Microsoft SQL Server Trace Flags

    Complete list of Microsoft SQL Server trace flags (585 trace flags) REMEMBER: Be extremely careful w ...

  4. Oracle12c版本中未归档隐藏参数

    In this post, I will give a list of all undocumented parameters in Oracle 12.1.0.1c. Here is a query ...

  5. Execution Plan 执行计划介绍

    后面的练习中需要下载 Demo 数据库, 有很多不同的版本, 可以根据个人需要下载.  下载地址 -http://msftdbprodsamples.codeplex.com/ 1. 什么是执行计划 ...

  6. C++ Core Guidelines

    C++ Core Guidelines September 9, 2015 Editors: Bjarne Stroustrup Herb Sutter This document is a very ...

  7. 数据库系统概述(Data Model、DBMS、DBS、RDBS、Structured Query Language)

    数据Data 描述事物的符号记录成为数据. 数据是数据库中存储的基本对象.   除了基本的数字之外.像图书的名称.价格.作者都可以称为数据. 将多种数据记录列成一张表.通过数据表管理数据. 每一行的数 ...

  8. sqlmap用法

    用法 Usage: python sqlmap.py [options] Options: -h, --help Show basic help message and exit -hh Show a ...

  9. UBIFS - UBI File-System

    参考:http://www.linux-mtd.infradead.org/doc/ubifs.html#L_raw_vs_ftl UBIFS - UBI File-System Table of c ...

随机推荐

  1. Linux Bash命令杂记(tr col join paste expand)

    Linux Bash命令杂记(tr col join paste expand) tr命令 tr命令可以将输入的数据中的某些字符做替换或者是作删除 tr [-ds] STR d: 删除输入数据的中的S ...

  2. 精准容量、秒级弹性,压测工具 + SAE 方案如何完美突破传统大促难关?

    作者 | 代序 阿里云云原生技术团队 本文整理自<Serverless 技术公开课>,"Serverless"公众号后台回复"入门",即可获取系列文 ...

  3. 题解 有标号DAG计数

    题目传送门 题目大意 给出\(n\),求出对于任意\(t\in[1,n]\),点数为\(t\)的弱联通\(\texttt{DAG}\)个数.答案对\(998244353\)取模. \(n\le 10^ ...

  4. 简单几步零成本使用Vercel部署OneIndex 无需服务器搭建基于OneDrive的网盘

    前提 你需要一个OneDrive账号,必须管理员开放API 需要已安装Node.js 拥有Github账号,没有就注册一个 魔法上网环境(看情况) 注册应用 登录https://portal.azur ...

  5. TCP服务器和客户端_Socket编程

    TCP服务器 服务器启动文件 1 import java.io.IOException; 2 import java.net.ServerSocket; 3 import java.net.Socke ...

  6. python T1119紧急措施

    2021-10-18 题目: 近日,一些热门网站遭受黑客入侵,这些网站的账号.密码及 email 的数据惨遭泄露.你在这些网站上注册若干账号(使用的用户名不一定相同),但是注册时使用了相同的 emai ...

  7. Longhorn 云原生容器分布式存储 - 故障排除指南

    内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 云原生容器分布式存储 - 设计架构和概念 Longhorn 云原生容器分布式存储 - ...

  8. 《手把手教你》系列技巧篇(三十四)-java+ selenium自动化测试-单选和多选按钮操作-中篇(详解教程)

    1.简介 今天这一篇宏哥主要是讲解一下,如何使用list容器来遍历单选按钮.大致两部分内容:一部分是宏哥在本地弄的一个小demo,另一部分,宏哥是利用JQueryUI网站里的单选按钮进行实战. 2.d ...

  9. CSP/S 2020 退役记

    上一次的AFO记 上上次的AFO记 Day -INF 一条咸鱼的垂死挣扎. RP+=INF Day 0 出发辣. 早上来到机房,带上了准备的面包和泡面....然而后来嫌太占地方就没拿...草了. 而且 ...

  10. Java设计模式——模板设计模式

    模板设计模式 1.模板模式简介 模板模式(Template ):模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑 ...