CF482D Random Function and Tree 树形DP + 思维 + 神题
挺神的一道树形 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 + 思维 + 神题的更多相关文章
- 熟练剖分(tree) 树形DP
熟练剖分(tree) 树形DP 题目描述 题目传送门 分析 我们设\(f[i][j]\)为以\(i\)为根节点的子树中最坏时间复杂度小于等于\(j\)的概率 设\(g[i][j]\)为当前扫到的以\( ...
- 【DP_树形DP专题】题单总结
转载自 http://blog.csdn.net/woshi250hua/article/details/7644959#t2 题单:http://vjudge.net/contest/123963# ...
- 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: ...
- 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 ...
- codeforces 161D Distance in Tree 树形dp
题目链接: http://codeforces.com/contest/161/problem/D D. Distance in Tree time limit per test 3 secondsm ...
- hdu6035 Colorful Tree 树形dp 给定一棵树,每个节点有一个颜色值。定义每条路径的值为经过的节点的不同颜色数。求所有路径的值和。
/** 题目:hdu6035 Colorful Tree 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6035 题意:给定一棵树,每个节点有一个颜色值.定 ...
- 5.10 省选模拟赛 tree 树形dp 逆元
LINK:tree 整场比赛看起来最不可做 确是最简单的题目. 感觉很难写 不过单独考虑某个点 容易想到树形dp的状态. 设f[x]表示以x为根的子树内有黑边的方案数. 白边方案只有一种所以不用记录. ...
- Codeforces Round #263 Div.1 B Appleman and Tree --树形DP【转】
题意:给了一棵树以及每个节点的颜色,1代表黑,0代表白,求将这棵树拆成k棵树,使得每棵树恰好有一个黑色节点的方法数 解法:树形DP问题.定义: dp[u][0]表示以u为根的子树对父亲的贡献为0 dp ...
- codeforces Round #263(div2) D. Appleman and Tree 树形dp
题意: 给出一棵树,每个节点都被标记了黑或白色,要求把这棵树的其中k条变切换,划分成k+1棵子树,每颗子树必须有1个黑色节点,求有多少种划分方法. 题解: 树形dp dp[x][0]表示是以x为根的树 ...
随机推荐
- 【DEBUG】 Visual Studio 2005 DEBUG集
一. fatal error C1083: 无法打开包括文件:"stdint.h": No such file or directory stdint.h是c99标准的头文件,vc ...
- Android 开源框架Universal-Image-Loader全然解析(一)--- 基本介绍及使用
转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/26810303).请尊重他人的辛勤劳动成果,谢谢! 大家好! ...
- pat解题报告【1082】
1082. Read Number in Chinese (25) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard ...
- Extjs显示图片
1.首先做一个容器 xtype : 'container', // 第2行 anchor : '100%', layout : 'column', items : [{ columnWidth : 0 ...
- C#如何读写和创建INI文件(经典)转
C#如何读写和创建INI文件 分类: c#程序设计2011-11-27 20:42 4935人阅读 评论(2) 收藏 举报 inic#stringbuffernullfile 在做项目过程中,有时需要 ...
- IntelliJ IDEA :解决idea导入项目爆红
转:https://my.oschina.net/LevelCoder/blog/1802158 我们在导入一个新的项目到idea的时候,项目明明没有报错,但是会出现出了父包属于正常颜色外,其子包都会 ...
- 81.Ext TreePanel实现单选等功能
转自:https://blog.csdn.net/iteye_7988/article/details/81886654 在ext1.x里,树是没有checkbox的, 幸好在2.X版本里提供了这个功 ...
- Struts2标签库常用标签
转自:https://blog.csdn.net/q547550831/article/details/53326042
- A Round Peg in a Ground Hole(圆与凸包)
http://poj.org/problem?id=1584 题意:判断所给的点能不能形成凸包,并判断所给的圆是否在凸包内. 改了好几天的一个题,今天才发现是输入顺序弄错了,办过的最脑残的事情..sa ...
- El和标准标签
EL表达式针对于四大作用域:application,session,request,pagecontext(作用域由大倒小)${作用域获取内容的名字}是根据作用域最小的取,指定作用域${session ...