挺神的一道树形 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. imu 和 private redo

    在传统的undo管理模式中,Oracle对undo和data block是一视同仁.这样大致会有三种弊端: 1)事务开始时,存放事务表的段头不在内存,server process需要将此i/o上来 2 ...

  2. Clojure:日期操作方法

    ;; 日期格式转换 (def df (java.text.SimpleDateFormat. "yyyy-MM-dd hh:mm:ss")) ;; 字符串转换到日期 (defn s ...

  3. jQuery Validate 使用

    jQuery Validate 使用 <script src="js/b/js/jquery.validate.js"></script> <styl ...

  4. nyoj 1238 最少换乘 (河南省第八届acm程序设计大赛)

    题目1238 题目信息 执行结果 本题排行 pid=1238" style="text-decoration:none; color:rgb(55,119,188)"&g ...

  5. CentOS下安装使用phpMyAdmin. Set up phpMyAdmin on CentOS

    须要组件: Apache PHP Mysql phpMyAdmin Apache 0. yum install httpd 1. 确认版本号 $ httpd -v 2. 启动apache $ sudo ...

  6. hdu 4768 异或运算

    http://acm.hdu.edu.cn/showproblem.php?pid=4768 貌似非常多人是用的二分 可是更好的做法貌似还是异或 对于第k个人.假设他接到偶数个传单.那么异或的结果还是 ...

  7. IE6、IE7的兼容问题

    通常,网页的兼容问题,就是IE6\IE7的问题.表现为错位.换行,不支持CSS3等. 而其中,错位.换行,原因往往在于没有指明元素的width.height. 一般银瓦不告诉他.

  8. Color a Tree HDU - 6241

    /* 十分巧妙的二分 题意选最少的点涂色 使得满足输入信息: 1 x的子树涂色数不少于y 2 x的子树外面涂色数不少于y 我们若是把2转化到子树内最多涂色多少 就可以维护这个最小和最大 如果我们二分出 ...

  9. 解析Qt元对象系统(四) 属性系统(确实比较方便)

    官方解释 我们在Qt源码中可以看到一个QObject的子类经常会用到一些Q_开头的宏,例如QMainWindow类开始部分代码是这样的: Q_PROPERTY(QSize iconSize READ ...

  10. [整理] C#调用SQLDMO.DLL时间数据库备份 / 还原。 (香神无涯) // C#实现SQLSERVER2000数据库备份还原的两种方法 (带进度条)

    /// <summary>/// 通过调用MSSQL的SQLDMO.DLL文件来实现备份数据库/// 1.首先在在项目中引用SQLDMO.DLL文件./// 2.在引用中的SQLDMO.D ...