codeforces round# 302 (div1 D 树形计数)
来源:互联网 发布:手机表格软件wps 编辑:程序博客网 时间:2024/05/16 14:41
首先这个题目要求的是对于给定的一刻树,求每个点到其他所有点每条路径上至多有一条不好的边,求问每个点的所有方案。
分析:
先求出1到所有点的可行性方案,那么其他点的值,可由该点递推出来。
考虑 fa[u] 代表u的父节点只不经过u的所有方案书, 那么ans[ u ] = d[ u ]*fa[u];(d[u] 代表以1为根的树只考虑从u往下走可行方案数)
//#pragma comment(linker, "/STACK:1024000000,1024000000")#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <vector>#include <set>#include <map>#include <string>#include <list>#include <cstdlib>#include <queue>#include <stack>#include <cmath>#include <bitset>#include <cassert>#define ALL(a) a.begin(), a.end()#define clr(a, x) memset(a, x, sizeof a)#define X first#define Y second#define pb push_back#define lowbit(x) (x&(-x))#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define rep1(i,x,y) for(int i=x;i<=y;i++)#define rep(i,n) for(int i=0;i<(int)n;i++)using namespace std;const double eps = 1e-10;typedef long long LL;typedef long long ll;typedef pair<int, int> pii;const int oo =0x3f3f3f3f;const int N = 2e5+1000;const int mod = 1e9+7;ll d[N];vector<int> G[N];ll dfs(int u){ d[u] = 1; rep(i,G[u].size()) d[u] = d[u]*(dfs(G[u][i])+1)%mod; return d[u];}ll ans[N],l[N],r[N],up[N];ll cal(int u){ l[0] = 1; rep(i,G[u].size()) l[i+1]=l[i]*(d[G[u][i]]+1)%mod; r[G[u].size()-1] = 1; for(int i=G[u].size()-1;i>=1;i--) r[i-1] = r[i]*(d[G[u][i]]+1)%mod; rep(i,G[u].size()){ int v = G[u][i]; up[v] = (l[i]*r[i]%mod*up[u]+1)%mod; ans[v] = up[v]*d[v]%mod; } rep(i,G[u].size()) cal(G[u][i]);}int n;int main(){ scanf("%d",&n); rep1(i,2,n){ int x; scanf("%d",&x); G[x].push_back(i); } dfs(1); ans[1] = d[1]; up[1] = 1; cal(1); rep1(i,1,n){ if(i>1) printf(" "); printf("%d",(int)ans[i]); } printf("\n"); return 0;}
0 0
- codeforces round# 302 (div1 D 树形计数)
- codeforces round# 296 (div1 D)(bitmasks)
- Codeforces Round #277 (Div. 2)D(树形DP计数类)
- Codeforces Round #302 (Div. 1)D. Road Improvement 树形dp
- Codeforces Round 200 Div1 D Water Tree (树上线段树)
- Codeforces Round #352 div1 C D (智商+线段树)
- Codeforces Round #445 Div1 D:Symmetric Projections (计算几何)
- codeforces round# 302 (div1 C) (状压dp)
- codeforces round 156 div1
- Codeforces Round #223 div1
- codeforces round #250 div1
- codeforces round #253 div1
- Codeforces Round 313(div1)
- codeforces-div1-282-D
- codeforces-div1-284-D
- codeforces-div1-286-D
- codeforces-div1-285-D
- codeforces 250 div1 D
- 【Linux导论】Linux术语(Linux Terminology)
- 如何定位Android NDK开发中遇到的错误
- springMVC教程初级(二)初始springmvc(详细分析)
- Oracle 日期函数to_date
- getCurrentSession hibernate in web
- codeforces round# 302 (div1 D 树形计数)
- URAL 1119 Metro (DP动态规划)
- Xilinx 双口RAM Ipcore Teset(VHDL)
- ArrayList.remove()的一个小细节
- 总线,设备,驱动——(2)match,probe,remove函数
- 哈希函数的构造方法
- 【笔记】HTML+CSS基础课程(慕课)-CSS部分
- 对安卓反编译点的一点收获
- mongoDB 3.0 安全权限访问控制