• bzoj2337 XOR和路径


    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2337

    首先:因为是异或和,所以可以考虑每一位考虑。

    就在每一位上求一下该位是1的概率,乘以1<<k累加到答案里就行了。

    可以用a[i]表示从 i 点走到 n 点的该位是1的概率。

      如果 i , j 有边,考虑 j 对 i 有什么影响,可以设定成正在从 i 往 j 走,最后走到n;

      那么,如果这条边是1,则 j 到 n 是0的概率可以累加到 i 到 n 是1的概率;如果边是0,则 j 到 n 是1的概率可以累加到 i 到 n 是1的概率。

      ( j 到 n 是0的概率就是(1-a[ j ]),(1-a[ j ])/ du[ j ] 拆一下就是在得数中减去1/du[ j ],a[ j ]的系数是-1/du[ j ])

    而且 x[n] 应该赋初值0,才符合自己的定义。

    看到很多题解好像和自己的正相反,符号、和 x[n] 的初值都是相反的,到底是怎么回事呢?

      (虽然不知道意义,但全反一下还是能求出正解吗……)

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    const int N=105,M=10005,lm=31;
    int n,m,head[N],xnt,du[N];
    double f[N][N],a[N],ans;
    struct Edge{
        int next,to,w;
        Edge(int n=0,int t=0,int w=0):next(n),to(t),w(w) {}
    }edge[M<<1];
    void init(int l)
    {
        memset(f,0.0,sizeof f);
        for(int i=1;i<n;i++)
        {
            f[i][i]=-1;
            for(int j=head[i];j;j=edge[j].next)//从i走到v 
                if(edge[j].w&l)
                    f[i][edge[j].to]-=1.0/du[i],f[i][n+1]-=1.0/du[i];
                else f[i][edge[j].to]+=1.0/du[i];
        }
    }
    void gauss()
    {
        for(int i=1;i<n;i++)
        {
            for(int j=n+1;j>=i;j--)f[i][j]/=f[i][i];
            for(int j=i+1;j<n;j++)
                for(int k=n+1;k>=i;k--)
                    f[j][k]-=f[j][i]*f[i][k];
        }
        for(int i=n-1;i;i--)
        {
            a[i]=f[i][n+1];
            for(int j=i-1;j;j--)
                f[j][n+1]-=f[j][i]*a[i];
        }
    }
    int main()
    {
        scanf("%d%d",&n,&m);int x,y,z;
        for(int i=1;i<=m;i++)
        {
            scanf("%d%d%d",&x,&y,&z);
            edge[++xnt]=Edge(head[x],y,z);head[x]=xnt;du[x]++;
            if(x!=y)edge[++xnt]=Edge(head[y],x,z),head[y]=xnt,du[y]++;
        }
        for(int i=0;i<lm;i++)
        {
            init(1<<i);gauss();
            ans+=(1<<i)*a[1];
        }
        printf("%.3lf",ans);
        return 0;
    }
  • 相关阅读:
    spark 机器学习 随机森林 实现(二)
    spark 机器学习 随机森林 原理(一)
    spark 机器学习 决策树 原理(一)
    spark 机器学习 朴素贝叶斯 实现(二)
    ★★★★★★★★★★★★★博客园的文章目录★★★★★★★★★★★★
    celery 的使用
    rabbitmq 参考手册
    rabbitmq 的简单使用
    django 常用组件
    celery 参考资料
  • 原文地址:https://www.cnblogs.com/Narh/p/9052444.html
Copyright © 2020-2023  润新知