CF1929D Sasha and a Walk in the City

简单树形动态规划。

我们把选取到的点称为黑点,由题意得,一个合法的点集能使树中任意一条简单路径上的黑点数量不超过两个。也就是说,如果黑点数量多于 \(2\),对于任意两个黑点,它们如果在同一个节点的子树内,必然是兄弟关系。否则,一旦存在祖先关系,由于黑点数量多于 \(2\),必然有一个黑点可以与这两个点组成一条黑点数量超过两个的简单路径。

设状态 \(dp_{i,j}\) 表示以 \(i\) 为根的子树内,从根到叶子节点最多经过 \(j\) 个黑点。显然,只有 \(j\) 等于 \(0,1\) 或 \(2\) 时,状态是合法的。

考虑如何转移,对于 \(dp_{i,0}\),显然等于 \(1\)。

对于 \(dp_{i,1}\),由于根到叶子节点最多经过黑点数最大值为 \(1\),最多就是两条到根的路径合并,经过 \(1+1=2\) 个黑点,所以每一个儿子内可以任意选择。另外,每个子树内还可以从没有黑点涂子树的根上的黑点变成有 \(1\) 个黑点,所以还需要加入没有黑点的方法数。根据乘法原理,可以推出如下转移式:

\[dp_{i,1}=\prod_{j\in son(i)}(dp_{j,0}+dp_{j,1})=\prod_{j\in son(i)}(1+dp_{j,1})
\]

对于 \(dp_{i,2}\),由于根到叶子节点最多经过黑点数最大值为 \(2\),所以只能有一个子树内的 \(dp\) 值可以转移来,否则必然可以构造一条黑点数量超过两个的简单路径。另外,每个子树内还可以从 \(1\) 个黑点涂子树的根上的黑点变成有 \(2\) 个黑点,所以还需要加入 \(1\) 个黑点的方法数。根据加法原理,可以推出如下转移式:

\[dp_{i,2}=\sum_{j\in son(i)}(dp_{j,1}+dp_{j,2})
\]

以 \(1\) 为整棵树的根,最后的答案为 \(dp_{1,0}+dp_{1,1}+dp_{1,2}\),也就是 \(1+dp_{1,1}+dp_{1,2}\)。

#include <bits/stdc++.h>
using namespace std;
struct edge
{
long long v,nxt;
}e[800000];
long long t,u,v,n,mod=998244353,h[800000],f[800000][3],cnt=0;
void add_edge(long long u,long long v)
{
e[++cnt].nxt=h[u];
e[cnt].v=v;
h[u]=cnt;
} void init()
{
for(int i=1;i<=n;i++)h[i]=0,f[i][1]=1,f[i][2]=0;
cnt=0;
} void dfs(long long x,long long fa)
{
for(int i=h[x];i;i=e[i].nxt)
if(e[i].v!=fa)
{
dfs(e[i].v,x);
f[x][1]=(f[x][1]*(f[e[i].v][1]+1)%mod)%mod;
f[x][2]=(f[x][2]+f[e[i].v][1]+f[e[i].v][2])%mod;
}
} int main()
{
scanf("%lld",&t);
while(t--)
{
scanf("%lld",&n);
init();
for(int i=1;i<=n-1;i++)
{
scanf("%lld%lld",&u,&v);
add_edge(u,v),add_edge(v,u);
}
dfs(1,0);
printf("%lld\n",(f[1][1]+f[1][2]+1)%mod);
}
return 0;
}

CF1929D Sasha and a Walk in the City 题解的更多相关文章

  1. bzoj3125: CITY 题解

    3125: CITY Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 486  Solved: 213[Submit][Status][Discuss] ...

  2. ZOJ 3195 Design the city 题解

    这个题目大意是: 有N个城市,编号为0~N-1,给定N-1条无向带权边,Q个询问,每个询问求三个城市连起来的最小权值. 多组数据 每组数据  1 < N < 50000  1 < Q ...

  3. CodeForces 821D Okabe and City

    Okabe and City 题解: 将行和列也视为一个点. 然后从普通的点走到行/列的点的话,就代表这行/列已经被点亮了. 然后将费用为0的点建上边. 注意讨论(n,m)非亮的情况下. 代码: #i ...

  4. [HIMCM暑期班]第2课:建模

    第二节课从最简单的模型开始入手:七桥问题. 首先,先去wikipedia上了解一些有关七桥问题的背景知识.http://en.wikipedia.org/wiki/Seven_Bridges_of_K ...

  5. D. Bear and Two Paths(贪心构造)

    D. Bear and Two Paths time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  6. VK Cup 2016 D. Bear and Two Paths 模拟

    D. Bear and Two Paths time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  7. Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) D. Bear and Two Paths 构造

    D. Bear and Two Paths 题目连接: http://www.codeforces.com/contest/673/problem/D Description Bearland has ...

  8. Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) D

    D. Bear and Two Paths time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  9. codeforces 673D D. Bear and Two Paths(构造)

    题目链接: D. Bear and Two Paths time limit per test 2 seconds memory limit per test 256 megabytes input ...

  10. cf公式专场-续

    Benches Time Limit:500MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Statu ...

随机推荐

  1. Linux浅谈(四)----中断&异常

    简介 CPU中断时操作系统中的两个重要概念,都作用于改变CPU执行的正常流程. 当出现某些特殊情况(如外部设备请求服务.定时器时间到等)时,CPU 暂停当前正在执行的程序,转去执行处理这些特殊情况的程 ...

  2. public boolean add(E e)的源码分析

    public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess ...

  3. 🎀MySQL-关键字执行顺序

    简介 在MySQL中,SQL查询语句的执行遵循一定的逻辑顺序,即使这些关键字在SQL语句中的物理排列可能有所不同. 语句顺序 (8) SELECT (9) DISTINCT<select_lis ...

  4. 格林威治时间(Tue Jan 01 00:00:00 CST 2019)转Date

    Excel导入时后台接受日期格式数据为[格林威治时间](例:Tue Jan 01 00:00:00 CST 2019) 格林威治时间转Date package com.cn; import java. ...

  5. 结合钉钉机器人用python写监控打印机碳粉状态程序

    点击查看代码 from pysnmp.hlapi import * import requests import json # 配置信息 PRINTER_IP = '1.1.1.1' # 打印机IP ...

  6. 探秘Transformer系列之(27)--- MQA & GQA

    探秘Transformer系列之(27)--- MQA & GQA 目录 探秘Transformer系列之(27)--- MQA & GQA 0x00 概述 0x01 MHA 1.1 ...

  7. HTTP表单请求

    okHttp 发送表单请求 需要添加依赖 compile group: 'com.squareup.okhttp3', name: 'okhttp', version: '4.9.0' import ...

  8. 移动开发webapp开发常用meta设置手机浏览器全屏模式,webappmeta

    1.WebApp全屏模式: <meta name="viewport" content="width=device-width,initial-scale=1.0, ...

  9. 国内首个「混合推理模型」Qwen3深夜开源,盘点它的N种对接方式!

    今日凌晨,通义千问团队正式开源了 Qwen3 大模型,并且一口气发布了 8 个型号,其中包括 0.6B.1.7B.4B.8B.14B.32B 以及 30B-A3B 和 235B-A22B,使用者可以根 ...

  10. xshell远程连接出现WARNING! The remote SSH server rejected X11 forwarding request.

    解决办法: 编辑sshd配置文件 vi /etc/ssh/sshd_config 设置 X11Forwarding yes UserLogin no //原本的注释解开 yum install -y ...