题意:

有一颗树,每条边是好边或者是坏边,对于一个节点为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 ;
}

代码君

最新文章

  1. JACASCRIPT--的奇技技巧的44招
  2. Egret命令行小结
  3. 【AngularJs】---JSONP跨域访问数据传输
  4. iOS常见问题(1)
  5. C/C++流程图生成器 C转流程图【worldsing笔记】
  6. 页面全屏显示JS代码
  7. Stack栈的三种含义
  8. phpStudy 切换版本后没有权限的问题
  9. 获取C#中方法的执行时间及其代码注入
  10. Redis基础认识及常用命令使用(一)--转载
  11. BugPhobia休息篇章:Beta阶段第IX次Scrum Meeting前奏
  12. WPS 表格筛选两列相同数据-完美-2017年11月1日更新
  13. vue-demo
  14. c++中double类型控制小数位数
  15. aaronyang的百度地图API之LBS云与.NET开发 Javascript API 2.0【把数据存到LBS云1/2】
  16. 国内云计算的缺失环节: GPU并行计算(转)
  17. shell批量重命令文件脚本
  18. php菜刀分析学习
  19. mysql恢复和数据导入的问题(ERROR 2006 (HY000) at line 1016: MySQL server has gone away)
  20. 关于require js加载的时候报错的问题

热门文章

  1. 用canvas裁剪图片
  2. arcgis jsapi接口入门系列(0):总览
  3. MATLAB 添加自定义的模块到simulink库浏览器
  4. [选择排序] 时间复杂度O(n^2)
  5. 转:error LNK2005: ...already defined in MSVCRTD.lib
  6. WinForm 公共控件和属性
  7. (转载)WPF:DataGrid设置行、单元格的前景色
  8. [VC]listctrl的基本用法
  9. Android(java)学习笔记118:BroadcastReceiver之 外拨电话的广播接收者
  10. ansible 任务委派 delegate_to