zoukankan      html  css  js  c++  java
  • BZOJ 2337 [HNOI2011]XOR和路径 ——期望DP

    首先可以各位分开求和

    定义$f(i)$表示从i到n的期望值,然后经过一些常识,发现$f(n)=1$的时候的转移,然后直接转移,也可以找到$f(n)=0$的转移。

    然后高斯消元31次就可以了。

    #include <map>
    #include <ctime>
    #include <cmath>
    #include <queue>
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    #define F(i,j,k) for (int i=j;i<=k;++i)
    #define D(i,j,k) for (int i=j;i>=k;--i)
    #define maxn 20005
     
    int h[maxn],to[maxn],ne[maxn],du[maxn],w[maxn],en=0,n,m;
    double a[105][105],ans[105];
     
    void add(int a,int b,int c)
    {du[a]++;to[en]=b;ne[en]=h[a];w[en]=c;h[a]=en++;}
     
    void Gauss()
    {
        F(i,1,n-1)
        {
            int tmp=i;
            F(j,i,n-1)if(fabs(a[j][i])>fabs(a[tmp][i]))tmp=j;
            F(j,i,n+1) swap(a[i][j],a[tmp][j]);
            F(j,i+1,n-1)
            {
                double tmp=a[j][i]/a[i][i];
                F(k,i,n+1) a[j][k]-=a[i][k]*tmp;
            }
        }
        D(i,n-1,1)
        {
            F(j,i+1,n)
                a[i][n+1]-=a[i][j]*ans[j];
            ans[i]=a[i][n+1]/a[i][i];
        }
    }
     
    double ret=0.0;
     
    void solve(int x)
    {
        memset(a,0,sizeof a);
        memset(ans,0,sizeof ans);
        F(i,1,n-1)
        {
            for (int j=h[i];j>=0;j=ne[j])
                if ((w[j]>>x)&1)
                    a[i][to[j]]+=1,a[i][n+1]+=1;
                else a[i][to[j]]-=1;
            a[i][i]+=du[i];
        }
    //  F(i,1,n) F(j,1,n+1) printf("%.6f%c",a[i][j],j==n+1?'
    ':' ');printf("
    
    ");
        Gauss();
        ret+=ans[1]*(1<<x);
    }
     
    int main()
    {
        memset(h,-1,sizeof h);
        scanf("%d%d",&n,&m);
        F(i,1,m)
        {
            int a,b,c;
            scanf("%d%d%d",&a,&b,&c);
            add(a,b,c);if (a!=b) add(b,a,c);
        }
        D(i,30,0) solve(i);
        printf("%.3f
    ",ret);
    }
    

      

  • 相关阅读:
    符号解析
    编译器与链接器的功能
    hook的本质就是在本原可执行文件中加东西
    Mac-O文件加载的全过程(一)
    系统在执行可执行文件几个过程
    动态库连接器–动态库链接信息(Mach-O文件格式和程序从加载到执行过程)
    load 调用的顺序
    iPhone Mach-O文件格式与代码签名
    Redis正确使用的十个技巧
    redis slowlog
  • 原文地址:https://www.cnblogs.com/SfailSth/p/6669940.html
Copyright © 2011-2022 走看看