• 洛谷P2973 [USACO10HOL]赶小猪


    https://www.luogu.org/problemnew/show/P2973

    dp一遍,(f_i=sum_{edge(i,j)}frac{f_j imes(1-frac{P}{Q})}{du_j} + frac{P}{Q})

    然后发现有环,高斯消元一遍

    (zz到高斯消元都能写错。。。)

    #include<bits/stdc++.h>
    #define il inline
    #define vd void
    #define double long double
    typedef long long ll;
    il int gi(){
        int x=0,f=1;
        char ch=getchar();
        while(!isdigit(ch)){
            if(ch=='-')f=-1;
            ch=getchar();
        }
        while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
        return x*f;
    }
    int fir[301],dis[90010],nxt[90010],id,in[301];
    il vd link(int a,int b){nxt[++id]=fir[a],fir[a]=id,dis[id]=b;}
    #define eps 1e-13
    double s[301][302];
    int main(){
        int n=gi(),m=gi(),p=gi(),q=gi(),a,b;
        while(m--)a=gi(),b=gi(),link(a,b),link(b,a),++in[a],++in[b];
        for(int i=1;i<=n;++i){
            if(i==1)s[i][n+1]=1;
            for(int j=fir[i];j;j=nxt[j])
                s[i][dis[j]]=(p*1.0/q-1)/(in[dis[j]]);
            s[i][i]=1;
        }
        for(int i=1;i<=n;++i){
            int t=i;  
            for(int j=i;j<=n;++j)if(fabs(s[j][i])>eps){t=j;}
            for(int j=1;j<=n+1;++j)std::swap(s[t][j],s[i][j]);
            for(int j=i+1;j<=n;++j){
                if(fabs(s[j][i])<eps)continue;
                for(int k=n+1;k>=i;--k)s[j][k]-=s[i][k]*s[j][i]/s[i][i];
            }
        }
        for(int i=n;i;--i){
            for(int j=i+1;j<=n;++j)s[i][n+1]-=s[j][n+1]*s[i][j];
            s[i][n+1]/=s[i][i];
        }
        for(int i=1;i<=n;++i)printf("%.9Lf
    ",s[i][n+1]*p/q);
        return 0;
    }
    
  • 相关阅读:
    react 性能优化
    JS获取当前网页大小以及屏幕分辨率等
    创建对象的6种方式总结
    版本号规则
    JS事件模型
    浅谈虚拟DOM
    浏览器的回流与重绘
    JavaScript预编译
    canvas学习笔记
    java、tomcat安装
  • 原文地址:https://www.cnblogs.com/xzz_233/p/9739758.html
Copyright © 2020-2023  润新知