CodeForces 543D 树形DP Road Improvement
2024-09-07 04:50:58
题意:
有一颗树,每条边是好边或者是坏边,对于一个节点为x,如果任意一个点到x的路径上的坏边不超过1条,那么这样的方案是合法的,求所有合法的方案数。
对于n个所有可能的x,输出n个答案。
分析:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std; const int maxn = + ;
const int MOD = ;
int n; vector<int> G[maxn], pre[maxn], suf[maxn]; void scan(int& x)
{
x = ;
char c = ' ';
while(c < '' || c > '') c = getchar();
while(c >= '' && c <= '') { x = x * + c - ''; c = getchar(); }
} int d[maxn], f[maxn]; void mul(int& x, int y) { x = 1LL * x * y % MOD; } void dfs(int u)
{
d[u] = ;
int sz = G[u].size();
for(int i = ; i < sz; i++)
{
int v = G[u][i];
dfs(v);
mul(d[u], d[v] + );
} int p = , s = ;
for(int i = ; i < sz; i++)
{
mul(p, d[G[u][i]] + );
mul(s, d[G[u][sz--i]] + );
pre[u].push_back(p);
suf[u].push_back(s);
} reverse(suf[u].begin(), suf[u].end());
} void dfs2(int u)
{
int sz = G[u].size();
for(int i = ; i < sz; i++)
{
int v = G[u][i];
f[v] = f[u];
if(i > ) mul(f[v], pre[u][i - ]);
if(i < sz - ) mul(f[v], suf[u][i + ]);
f[v]++;
if(f[v] >= MOD) f[v] -= MOD;
dfs2(v);
}
} int main()
{
scanf("%d", &n);
for(int x, i = ; i <= n; i++)
{
scan(x);
G[x].push_back(i);
} dfs();
f[] = ;
dfs2(); for(int i = ; i <= n; i++) printf("%I64d ", 1LL * d[i] * f[i] % MOD); return ;
}
代码君
最新文章
- JACASCRIPT--的奇技技巧的44招
- Egret命令行小结
- 【AngularJs】---JSONP跨域访问数据传输
- iOS常见问题(1)
- C/C++流程图生成器 C转流程图【worldsing笔记】
- 页面全屏显示JS代码
- Stack栈的三种含义
- phpStudy 切换版本后没有权限的问题
- 获取C#中方法的执行时间及其代码注入
- Redis基础认识及常用命令使用(一)--转载
- BugPhobia休息篇章:Beta阶段第IX次Scrum Meeting前奏
- WPS 表格筛选两列相同数据-完美-2017年11月1日更新
- vue-demo
- c++中double类型控制小数位数
- aaronyang的百度地图API之LBS云与.NET开发 Javascript API 2.0【把数据存到LBS云1/2】
- 国内云计算的缺失环节: GPU并行计算(转)
- shell批量重命令文件脚本
- php菜刀分析学习
- mysql恢复和数据导入的问题(ERROR 2006 (HY000) at line 1016: MySQL server has gone away)
- 关于require js加载的时候报错的问题
热门文章
- 用canvas裁剪图片
- arcgis jsapi接口入门系列(0):总览
- MATLAB 添加自定义的模块到simulink库浏览器
- [选择排序] 时间复杂度O(n^2)
- 转:error LNK2005: ...already defined in MSVCRTD.lib
- WinForm 公共控件和属性
- (转载)WPF:DataGrid设置行、单元格的前景色
- [VC]listctrl的基本用法
- Android(java)学习笔记118:BroadcastReceiver之 外拨电话的广播接收者
- ansible 任务委派 delegate_to