• [Luogu P2973&BZOJ 1778][USACO10HOL]赶小猪DOtP(高斯消元+期望)


    Description

    一个无向图,节点1有一个炸弹,在每个单位时间内,有可能在这个节点炸掉,也有p/q的概率随机选择一条出去的路到其他的节点上。问最终炸弹在每个节点上爆炸的概率。

    Solution

    没错它就是BZOJ 1778…在bzoj上是权限题

    炸弹最终爆炸的概率是1(可能是在无穷无尽的时间之后…),于是到达某一点的概率除以到达所有点的概率就是在这个节点上爆炸的概率

    f[u]=∑f[v]*(1-p/q)/d[v]

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    using namespace std;
    int n,m,d[303],head[303],cnt=0;
    double a[303][303],f[303],p,q;
    struct Node
    {
        int next,to;
    }Edges[100005];
    void addedge(int u,int v)
    {
        Edges[++cnt].next=head[u];
        head[u]=cnt;
        Edges[cnt].to=v;
    }
    void Gauss()
    {
        for(int i=1;i<=n;i++)
        {
            int maxline=i;
            for(int j=i;j<=n;j++)
            if(a[j][i]>a[maxline][i])maxline=j;
            if(maxline!=i)
            for(int j=i;j<=n+1;j++)
            swap(a[maxline][j],a[i][j]);
            for(int j=i+1;j<=n;j++)
            {
                double t=a[j][i]/a[i][i];
                for(int k=i;k<=n+1;k++)
                a[j][k]-=t*a[i][k];
            }
        }
        for(int i=n;i>0;i--)
        {
            for(int j=n;j>i;j--)
            a[i][n+1]-=f[j]*a[i][j];
            f[i]=a[i][n+1]/a[i][i];
        }
    }
    int main()
    {
        memset(head,-1,sizeof(head));
        scanf("%d%d%lf%lf",&n,&m,&p,&q);
        for(int i=1;i<=m;i++)
        {
            int u,v;
            scanf("%d%d",&u,&v);
            addedge(u,v);
            addedge(v,u);
            d[u]++,d[v]++;
        }
        for(int i=1;i<=n;i++)
        {
            a[i][i]+=1;
            for(int j=head[i];~j;j=Edges[j].next)
            {
                int v=Edges[j].to;
                a[v][i]-=(1-p/q)/d[i];
            }
        }
        a[1][n+1]+=1-p/q;
        Gauss();
        double sum=0;
        for(int i=1;i<=n;i++)sum+=f[i];
        for(int i=1;i<=n;i++)
        printf("%.9lf
    ",f[i]/sum);
        return 0;
    } 
  • 相关阅读:
    Vue项目中跨域问题解决
    子网掩码
    C++的const类成员函数
    在python3中使用urllib.request编写简单的网络爬虫
    Linux 重定向输出到多个文件中
    背包问题
    hdu-1272 小希的迷宫
    SQLAlchemy 几种查询方式总结
    pycharm快捷键、常用设置、配置管理
    python3判断字典、列表、元组为空以及字典是否存在某个key的方法
  • 原文地址:https://www.cnblogs.com/Zars19/p/6820394.html
Copyright © 2020-2023  润新知