zoukankan      html  css  js  c++  java
  • Codeforces Round #263 (Div. 2) D. Appleman and Tree 树形dp

    链接:

    http://codeforces.com/contest/462/problem/D

    题意:

    给定n个点的树,

    0为根,下面n-1行表示每个点的父节点

    最后一行n个数 表示每个点的颜色,0为白色,1为黑色。

    把树分成若干个联通块使得每个联通块有且仅有一个黑点,问有多少种分法(结果mod1e9+7)

    题解:

    树形dp,每个点有2个状态,已经归属于某个黑点和未归属于某个黑点。

    代码:

    31 int n;
    32 int x[MAXN];
    33 VI G[MAXN];
    34 ll dp[MAXN][2];
    35 
    36 void dfs(int u) {
    37     if (x[u]) dp[u][1] = 1;
    38     else dp[u][0] = 1;
    39     rep(i, 0, G[u].size()) {
    40         int v = G[u][i];
    41         dfs(v);
    42         ll old[2] = { dp[u][0], dp[u][1] };
    43         dp[u][0] = (old[0] * dp[v][1] + old[0] * dp[v][0]) % MOD;
    44         dp[u][1] = (old[1] * dp[v][1] + old[1] * dp[v][0] + old[0] * dp[v][1]) % MOD;
    45     }
    46 }
    47 
    48 int main() {
    49     ios::sync_with_stdio(false), cin.tie(0);
    50     cin >> n;
    51     rep(i, 1, n) {
    52         int p;
    53         cin >> p;
    54         G[p].pb(i);
    55     }
    56     rep(i, 0, n) cin >> x[i];
    57     dfs(0);
    58     cout << dp[0][1] << endl;
    59     return 0;
    60 }
  • 相关阅读:
    MongoDB
    Flask-Migrate
    Flask-Script
    Flask-SQLAlchemy
    SQLAlchemy
    DBUtils
    依存句法分析
    如何将本地的jar包上传到maven本地仓库中
    git使用手册
    中文网页编解码问题
  • 原文地址:https://www.cnblogs.com/baocong/p/7288245.html
Copyright © 2011-2022 走看看