zoukankan      html  css  js  c++  java
  • Codeforces 1045D Interstellar battle

    Interstellar battle

    对于每个联通块的贡献我们把它放到深度最低的那个点上面去。

    那么一个点有贡献就是它的父亲被摧毁了并且自己没有被摧毁。

    然后把所有概率加起来就是期望了。

    #include<bits/stdc++.h>
    using namespace std;
    
    const int N = (int)1e5 + 7;
    
    int n;
    double p[N];
    double ans;
    double sum[N];
    int pa[N];
    vector<int> G[N];
    
    void dfs(int u, int fa) {
        pa[u] = fa;
        ans += p[fa] * (1 - p[u]);
        for(auto v : G[u]) {
            if(v == fa) continue;
            dfs(v, u);
            sum[u] += 1 - p[v];
        }
    }
    
    int main() {
        p[0] = 1;
        scanf("%d", &n);
        for(int i = 1; i <= n; i++) scanf("%lf", &p[i]);
        for(int i = 1; i < n; i++) {
            int u, v;
            scanf("%d%d", &u, &v);
            u++; v++;
            G[u].push_back(v);
            G[v].push_back(u);
        }
        dfs(1, 0);
        int q; scanf("%d", &q);
        while(q--) {
            int u; double x;
            scanf("%d%lf", &u, &x);
            u++;
            if(pa[u]) sum[pa[u]] -= 1 - p[u];
            ans -= (1 - p[u]) * p[pa[u]];
            ans -= p[u] * sum[u];
            p[u] = x;
            if(pa[u]) sum[pa[u]] += 1 - p[u];
            ans += (1 - p[u]) * p[pa[u]];
            ans += p[u] * sum[u];
            printf("%.12f
    ", ans);
        }
        return 0;
    }
    
    /*
    */
  • 相关阅读:
    【脑图】iOS的Crash分类和捕获
    Ruby03
    Ruby02
    Ruby01
    如何快速把一个十进制数转换为二进制?
    iOS
    互联网协议基本知识
    XCBB
    iOS
    iOS
  • 原文地址:https://www.cnblogs.com/CJLHY/p/11687528.html
Copyright © 2011-2022 走看看