zoukankan      html  css  js  c++  java
  • Codeforces Round #302 (Div. 1) D

    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;
    }
    
    /*
    */
  • 相关阅读:
    UOJ #276. 【清华集训2016】汽水
    Luogu P4585 [FJOI2015]火星商店问题
    Luogu P5416 [CTSC2016]时空旅行
    NOIP 2011 提高组初赛错题简析
    Luogu P4068 [SDOI2016]数字配对
    UOJ Easy Round #5
    Codechef September Challenge 2019 Division 2
    Project Euler Problem 675
    AtCoder Grand Contest 037
    拿2k的前端开发都会做些什么?
  • 原文地址:https://www.cnblogs.com/CJLHY/p/9643331.html
Copyright © 2011-2022 走看看