码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #302 (Div. 1) D - Road Improvement 树形dp

时间:2018-09-13 22:32:45      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:ret   return   要求   val   pair   pac   printf   ORC   include   

D - Road Improvemen

思路:0没有逆元!!!! 不能直接除,要求前缀积和后缀积!!!

#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define PII pair<int, int>
#define y1 skldjfskldjg
#define y2 skldfjsklejg

using namespace std;

const int N = 2e5 + 7;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;

int n;
LL dp[N], ans[N], fdp[N];
vector<int> edge[N];
vector<int> L[N], R[N];

void dfs(int u, int fa) {
    dp[u] = 1;
    LL pre = 1;
    L[u].resize(edge[u].size());
    R[u].resize(edge[u].size());
    for(int i = 0; i < edge[u].size(); i++) {
        int v = edge[u][i];
        L[u][i] = pre;
        if(v == fa) continue;
        dfs(v, u);
        dp[u] = dp[u] * (dp[v] + 1) % mod;
        L[u][i] = L[u][i] * (dp[v] + 1) % mod;
        pre = L[u][i];
    }

    pre = 1;
    for(int i = edge[u].size() - 1; i >= 0; i--) {
        int v = edge[u][i];
        R[u][i] = pre;
        if(v == fa) continue;
        R[u][i] = R[u][i] * (dp[v] + 1) % mod;
        pre = R[u][i];
    }
}

void dfs3(int u, int fa, LL val) {
    ans[u] = dp[u] * (val + 1) % mod;
    for(int i = 0; i < edge[u].size(); i++) {
        int v = edge[u][i];
        if(v == fa) continue;
        LL nxv = 1;
        if(i) nxv = L[u][i - 1];
        if(i + 1 < edge[u].size()) nxv = nxv * R[u][i + 1] % mod;
        dfs3(v, u, nxv * (val + 1) % mod);
    }
}

int main() {
    scanf("%d", &n);
    for(int i = 2; i <= n; i++) {
        int x; scanf("%d", &x);
        edge[i].push_back(x);
        edge[x].push_back(i);
    }
    dfs(1, 0);
    dfs3(1, 0, 0);
    for(int i = 1; i <= n; i++) printf("%lld ", ans[i]);
    return 0;
}

/*
*/

 

Codeforces Round #302 (Div. 1) D - Road Improvement 树形dp

标签:ret   return   要求   val   pair   pac   printf   ORC   include   

原文地址:https://www.cnblogs.com/CJLHY/p/9643331.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!