挺神的一道树形 DP,特别不好写题解,有时间再补吧.

#include<bits/stdc++.h>
#define ull unsigned long long
#define MOD 1000000007
#define ll long long
#define maxn 120000
using namespace std;
void setIO(string s)
{
string in=s+".in";
string out=s+".out";
freopen(in.c_str(),"r",stdin);
// freopen(out.c_str(),"w",stdout);
}
vector<int>G[maxn];
ll F[maxn][2];
void solve(int n)
{
for(int u=n;u>=1;--u)
{
F[u][1]=1,F[u][0]=0;
int siz=G[u].size();
if(siz==0) continue;
for(int i=0;i<siz;++i)
{
int v=G[u][i];
ll a = ((F[u][0]*F[v][0])%MOD+(F[u][1]*F[v][1])%MOD)%MOD;
ll b = ((F[u][1]*F[v][0])%MOD+(F[u][0]*F[v][1])%MOD)%MOD;
F[u][0]=(F[u][0]+a)%MOD;
F[u][1]=(F[u][1]+b)%MOD;
}
F[u][0]=(F[u][0]*2ll)%MOD;
F[u][1]=(F[u][1]*2ll)%MOD;
ll p[3],tmp;
p[0]=p[1]=1, p[2]=0;
for(int i=0;i<siz;++i)
{
int v=G[u][i];
p[0]=((p[0]*F[v][0])%MOD+p[0])%MOD; // 全偶 (即左右走都一样)
tmp=p[2];
p[2]=((p[1]*F[v][1])%MOD+p[2])%MOD;
p[1]=((tmp*F[v][1])%MOD+p[1])%MOD;
}
F[u][1]=(F[u][1]-p[0]+MOD)%MOD;
F[u][0]=(F[u][0]-p[2]+MOD)%MOD;
}
}
int main()
{
// setIO("input");
int n;
scanf("%d",&n);
for(int i=2;i<=n;++i)
{
int p;
scanf("%d",&p);
G[p].push_back(i);
}
solve(n);
printf("%lld\n",(F[1][0]+F[1][1])%MOD);
return 0;
}

  

CF482D Random Function and Tree 树形DP + 思维 + 神题的更多相关文章

  1. 熟练剖分(tree) 树形DP

    熟练剖分(tree) 树形DP 题目描述 题目传送门 分析 我们设\(f[i][j]\)为以\(i\)为根节点的子树中最坏时间复杂度小于等于\(j\)的概率 设\(g[i][j]\)为当前扫到的以\( ...

  2. 【DP_树形DP专题】题单总结

    转载自 http://blog.csdn.net/woshi250hua/article/details/7644959#t2 题单:http://vjudge.net/contest/123963# ...

  3. hdu-5834 Magic boy Bi Luo with his excited tree(树形dp)

    题目链接: Magic boy Bi Luo with his excited tree Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: ...

  4. CF 461B Appleman and Tree 树形DP

    Appleman has a tree with n vertices. Some of the vertices (at least one) are colored black and other ...

  5. codeforces 161D Distance in Tree 树形dp

    题目链接: http://codeforces.com/contest/161/problem/D D. Distance in Tree time limit per test 3 secondsm ...

  6. hdu6035 Colorful Tree 树形dp 给定一棵树,每个节点有一个颜色值。定义每条路径的值为经过的节点的不同颜色数。求所有路径的值和。

    /** 题目:hdu6035 Colorful Tree 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6035 题意:给定一棵树,每个节点有一个颜色值.定 ...

  7. 5.10 省选模拟赛 tree 树形dp 逆元

    LINK:tree 整场比赛看起来最不可做 确是最简单的题目. 感觉很难写 不过单独考虑某个点 容易想到树形dp的状态. 设f[x]表示以x为根的子树内有黑边的方案数. 白边方案只有一种所以不用记录. ...

  8. Codeforces Round #263 Div.1 B Appleman and Tree --树形DP【转】

    题意:给了一棵树以及每个节点的颜色,1代表黑,0代表白,求将这棵树拆成k棵树,使得每棵树恰好有一个黑色节点的方法数 解法:树形DP问题.定义: dp[u][0]表示以u为根的子树对父亲的贡献为0 dp ...

  9. codeforces Round #263(div2) D. Appleman and Tree 树形dp

    题意: 给出一棵树,每个节点都被标记了黑或白色,要求把这棵树的其中k条变切换,划分成k+1棵子树,每颗子树必须有1个黑色节点,求有多少种划分方法. 题解: 树形dp dp[x][0]表示是以x为根的树 ...

随机推荐

  1. 【DEBUG】 Visual Studio 2005 DEBUG集

    一. fatal error C1083: 无法打开包括文件:"stdint.h": No such file or directory stdint.h是c99标准的头文件,vc ...

  2. Android 开源框架Universal-Image-Loader全然解析(一)--- 基本介绍及使用

    转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/26810303).请尊重他人的辛勤劳动成果,谢谢! 大家好! ...

  3. pat解题报告【1082】

    1082. Read Number in Chinese (25) 时间限制   400 ms 内存限制   32000 kB 代码长度限制   16000 B 判题程序     Standard   ...

  4. Extjs显示图片

    1.首先做一个容器 xtype : 'container', // 第2行 anchor : '100%', layout : 'column', items : [{ columnWidth : 0 ...

  5. C#如何读写和创建INI文件(经典)转

    C#如何读写和创建INI文件 分类: c#程序设计2011-11-27 20:42 4935人阅读 评论(2) 收藏 举报 inic#stringbuffernullfile 在做项目过程中,有时需要 ...

  6. IntelliJ IDEA :解决idea导入项目爆红

    转:https://my.oschina.net/LevelCoder/blog/1802158 我们在导入一个新的项目到idea的时候,项目明明没有报错,但是会出现出了父包属于正常颜色外,其子包都会 ...

  7. 81.Ext TreePanel实现单选等功能

    转自:https://blog.csdn.net/iteye_7988/article/details/81886654 在ext1.x里,树是没有checkbox的, 幸好在2.X版本里提供了这个功 ...

  8. Struts2标签库常用标签

    转自:https://blog.csdn.net/q547550831/article/details/53326042

  9. A Round Peg in a Ground Hole(圆与凸包)

    http://poj.org/problem?id=1584 题意:判断所给的点能不能形成凸包,并判断所给的圆是否在凸包内. 改了好几天的一个题,今天才发现是输入顺序弄错了,办过的最脑残的事情..sa ...

  10. El和标准标签

    EL表达式针对于四大作用域:application,session,request,pagecontext(作用域由大倒小)${作用域获取内容的名字}是根据作用域最小的取,指定作用域${session ...