当前位置: 首页 > article >正文

iai 定向 题解

题目

题意

给定一棵树,给 n − 1 n-1 n1 条边定向,求恰有 k k k 个点无出边的方案数。

解析

设计 f ( u , i , 0 / 1 ) f(u,i,0/1) f(u,i,0/1) 表示以 u u u 为根的子树内,有 i i i 个无出边, u u u 是否有出边的方案数。

树背包。

考虑转移。对 v ∈ s o n u v \in son_u vsonu,枚举 j j j,钦定 v v v 子树贡献为 j j j,则 v v v 之前贡献为 i − j i-j ij,讨论边的方向:

u → v u \to v uv

f ( u , i , 1 ) = ∑ j ( f ( u , i − j + 1 , 0 ) + f ( u , i − j , 1 ) ) × ( f ( v , j , 0 ) + f ( v , j , 1 ) ) f(u,i,1) = \sum_{j} (f(u,i-j+1,0) +f(u,i-j,1)) \times (f(v,j,0)+f(v,j,1)) f(u,i,1)=j(f(u,ij+1,0)+f(u,ij,1))×(f(v,j,0)+f(v,j,1))

v → u v \to u vu

f ( u , i , 1 ) = ∑ j f ( u , i − j , 1 ) × ( f ( v , j + 1 , 0 ) + f ( v , j , 1 ) ) f ( u , i , 0 ) = ∑ j f ( u , i − j , 0 ) × ( f ( v , j + 1 , 0 ) + f ( v , j , 1 ) ) f(u,i,1) = \sum_j f(u,i-j,1) \times (f(v,j+1,0)+f(v,j,1))\\ f(u,i,0) = \sum_j f(u,i-j,0) \times (f(v,j+1,0)+f(v,j,1)) f(u,i,1)=jf(u,ij,1)×(f(v,j+1,0)+f(v,j,1))f(u,i,0)=jf(u,ij,0)×(f(v,j+1,0)+f(v,j,1))

注意树背包滚动数组的特点,倒序枚举,每轮的 f f f 值不要继承。

#include<bits/stdc++.h>
#define int long long
using namespace std;

const int N = 1005;
const int mod = 998244353;

vector <int> G[N];

int n, t, siz[N], f[N][N][2];

void dfs(int u, int fa)
{
	f[u][1][0] = 1, siz[u] = 1;
	for(auto v : G[u])
	{
		if(v == fa) continue;
		dfs(v, u), siz[u] += siz[v];
		for(int i=min(t, siz[u]); i>=1; i--)
		{
			int cur0 = 0, cur1 = 0;
			for(int j=0; j<=min(i, siz[v]); j++)
			{
				cur1 += (f[u][i-j][1] + f[u][i-j+1][0]) * (f[v][j][0] + f[v][j][1]) % mod, cur1 %= mod;
				cur1 += f[u][i-j][1] * (f[v][j+1][0] + f[v][j][1]) % mod, cur1 %= mod;
				cur0 += f[u][i-j][0] * (f[v][j+1][0] + f[v][j][1]) % mod, cur0 %= mod;
			}
			f[u][i][0] = cur0, f[u][i][1] = cur1;
		}
	}
}

signed main()
{
	ios::sync_with_stdio(0); cin.tie(0);
	
	cin >> n;
	
	for(int i=1; i<n; i++)
	{
		int u, v;
		cin >> u >> v;
		G[u].push_back(v), G[v].push_back(u);
	}
	
	cin >> t;
	
	dfs(1, 0);
	
	cout << (f[1][t][0] + f[1][t][1]) % mod;
}

http://www.kler.cn/a/104000.html

相关文章:

  • 总结使用React做过的一些优化
  • [Unity]将所有 TGA、TIFF、PSD 和 BMP(可自定义)纹理转换为 PNG,以减小项目大小,而不会在 Unity 中造成任何质量损失
  • swagger stub https无法访问
  • React hooks介绍及使用
  • MySQL精髓:如何使用ALL一次找到最大值
  • mysql 命令行安装
  • 【人工智能Ⅰ】实验1:谓词表示法与产生式知识表示
  • vueDay04——v-if else show
  • python sqlalchemy(ORM)- 02 表关系
  • ftp远程连接传输的常见问题有哪些?如何一站式解决传输问题?
  • Redis的开发利用
  • Redis主从模式(二)---拓扑结构及复制过程
  • 【stm32】stm32MX定时器
  • 嵌入式中的MCU、ARM、DSP、FPGA
  • 20231024后端研发面经整理
  • ArcGIS笔记12_ArcGIS搜索工具没法用?ArcGIS运行很慢很卡?
  • Hadoop分布式安装
  • 【可视化Java GUI程序设计教程】第4章 布局设计
  • 【Java】泛型擦除机制
  • vue 中 mixin 和 mixins 区别