zoukankan      html  css  js  c++  java
  • 【数学期望】【高斯消元】bzoj3143 [Hnoi2013]游走

    和hdu5955很像。也是注意从结点1出发,其概率要在方程左侧+1。

    边的期望和点的期望之间转换巧妙

    http://blog.csdn.net/thy_asdf/article/details/47335849

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    using namespace std;
    #define N 511
    int nn,mm;
    double B[N][N+1],A[N][N+1],x[N],b[N],pl[N+1][N];
    void guass_jordan()
    {
    	int n=nn-1;
        memcpy(B,A,sizeof(A));
        for(int i=1;i<=n;++i)
          B[i][n+1]=b[i];
        for(int i=1;i<=n;++i)//枚举:正在消除第i个未知数,之后第i个方程废掉,矩阵行、列-1
          {
            int pivot=i;
            for(int j=i+1;j<=n;++j)//枚举j:把正在处理的未知数的系数的绝对值最大的方程换到第i行
              if(fabs(B[j][i])>fabs(B[pivot][i]))
                pivot=j;
            swap(B[i],B[pivot]);
            //if(fabs(B[i][i])<EPS)
            //若所有(最大)的该未知数系数为0,说明少一个未知数,有无穷多解
            for(int j=i+1;j<=n+1;++j)
              B[i][j]/=B[i][i];
            for(int j=1;j<=n;++j)
              if(i!=j)//枚举所有的方程,从第j个方程中消去第i个未知数
                for(int k=i+1;k<=n+1;++k)//依次把第j个方程中的第k个未知数减去应减的数值
                  B[j][k]-=B[j][i]*B[i][k];
          }
        for(int i=1;i<=n;++i) x[i]=B[i][n+1];
    }
    struct Edge
    {
    	int u,v;
    	double x;
    }es[250010];
    bool cmp(const Edge &a,const Edge &b)
    {
    	return a.x>b.x;
    }
    int du[N];
    bool map[N][N];
    int main()
    {
    //	freopen("bzoj3143.in","r",stdin);
    	int X,Y;
    	scanf("%d%d",&nn,&mm);
    	for(int i=1;i<=mm;++i)
    	  {
    	  	scanf("%d%d",&es[i].u,&es[i].v);
    	  	++du[es[i].u];
    	  	++du[es[i].v];
    	  	map[es[i].u][es[i].v]=map[es[i].v][es[i].u]=1;
    	  }
    	b[1]=-1.0;
    	for(int i=1;i<nn;++i){
    	  for(int j=1;j<nn;++j)
    	    if(map[j][i])
    	      A[i][j]=1.0/(double)du[j];
    	  A[i][i]=-1.0;
    	}
    	guass_jordan();
    	for(int i=1;i<=mm;++i)
    	  es[i].x=x[es[i].u]/(double)du[es[i].u]+x[es[i].v]/(double)du[es[i].v];
    	sort(es+1,es+mm+1,cmp);
    	double ans=0;
    	for(int i=1;i<=mm;++i)
    	  ans+=((double)i*es[i].x);
    	printf("%.3lf
    ",ans);
    	return 0;
    }
  • 相关阅读:
    springmvc文件上传后访问上传的图片时404
    springmvc文件上传
    springmvc的注解开发
    使用maven简单搭建springmvc
    mybatis的逆向工程
    mybatis的动态sql
    使用maven创建项目配置mybatis
    使用maven和myeclipse配置hibernate以及基本的入门程序
    maven的常用命令
    try-with-resources和multi-catch的使用
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/6501527.html
Copyright © 2011-2022 走看看