题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3534

题意:给定一个无向图,每条边有选择概率P;求选出的边恰是一棵生成树的概率。

思路:

令$G(i,j)=\frac{P(i,j)}{1-P(i,j)},tmp=\prod_{i<j} (1-P(i,j))$。那么求G的n-1阶主子式的行列式乘以tmp即可。因为在生成树中的边(u,v)是P(u,v)/(1-P(u,v)),而tmp中有(1-P(u,v))这一项,乘完之后是P(u,v),不在生成树中的边(u1,v1)也不在ans中,乘以tmp中包含的1-P(u1,v1)。这样就正好满足了条件。

const int N=55;

const double inf=1e10;
double a[N][N];
int n;

double Gauss()
{
    n--;
    double ans=1;
    int i,j,k;
    for(i=1;i<=n;i++)
    {
        k=i;
        for(j=i+1;j<=n;j++) if(fabs(a[j][i])>fabs(a[k][i])) k=j;
        if(k!=i)
        {
            for(j=1;j<=n;j++) swap(a[k][j],a[i][j]);
        }
        for(j=i+1;j<=n;j++)
        {
            double tmp=a[j][i]/a[i][i];
            for(k=1;k<=n;k++) a[j][k]-=a[i][k]*tmp;
        }
        if(fabs(a[i][i])<EPS) return 0;

        ans*=a[i][i];
    }

    return fabs(ans);
}

int main()
{

    n=getInt();
    int i,j;
    double tmp=1;
    for(i=1;i<=n;i++) for(j=1;j<=n;j++)
    {
        scanf("%lf",&a[i][j]);
        if(i==j) continue;
        if(a[i][j]>1-EPS) a[i][j]-=EPS;
        if(i>j) tmp*=1-a[i][j];
        a[i][j]/=1-a[i][j];
    }
    for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(i!=j) a[i][i]-=a[i][j];
    double ans=Gauss()*tmp;

    printf("%.10lf\n",ans);
}

BZOJ 3534 重建的更多相关文章

  1. [bzoj 1758] 重建计划

    bzoj 1758 重建计划 题意: 给定一棵有边权的树和两个数 \(L, R (L\leq R)\),求一条简单路径,使得这条路径经过的边数在 \(L, R\) 之间且路径经过的边的边权的平均值最大 ...

  2. 【BZOJ 3534】 3534: [Sdoi2014]重建 (Matrix-Tree Theorem)

    3534: [Sdoi2014]重建 Time Limit: 10 Sec  Memory Limit: 512 MBSec  Special JudgeSubmit: 709  Solved: 32 ...

  3. 【BZOJ 3534】: [Sdoi2014]重建

    题目大意:(略) 题解: 相对误差……我好方. 考虑答案应该为所有合法答案概率之和.对于一个合法的生成树,其出现概率应为所有选取边的概率出现的积 乘以 所有未选取边不出现概率的积. 即: $\;\pr ...

  4. bzoj 3534: [Sdoi2014]重建【矩阵树定理】

    啊啊啊无脑背过果然不可取 比如这道题就不会写 参考:https://blog.csdn.net/iamzky/article/details/41317333 #include<iostream ...

  5. [bzoj 3534][Sdoi2014] 重建

    传送门 Description  T国有N个城市,用若干双向道路连接.一对城市之间至多存在一条道路. 在一次洪水之后,一些道路受损无法通行.虽然已经有人开始调查道路的损毁情况,但直到现在几乎没有消息传 ...

  6. BZOJ 3534: [Sdoi2014]重建(Matrix Tree)

    传送门 解题思路 比较容易看的出来矩阵树定理.然后就怒送一Wa,这个矩阵树定理是不能直接用的.题目要求的其实是这个玩意. \[ ans=\sum\limits_{Tree}( \prod\limits ...

  7. @总结 - 7@ 生成树计数 —— matrix - tree 定理(矩阵树定理)与 prüfer 序列

    目录 @0 - 参考资料@ @0.5 - 你所需要了解的线性代数知识@ @1 - 矩阵树定理主体@ @证明 part - 1@ @证明 part - 2@ @证明 part - 3@ @证明 part ...

  8. 旧题新做:从idy的视角看数据结构

    “今天你不写总结……!!!” 额…… 还是讲我的吧.这些考试都是idy出的题. 20170121:DFS序. ST表.线段树练习 这是第一次考数据结构. Problem 1. setsum 1 sec ...

  9. OI题目类型总结整理

    ## 本蒟蒻的小整理qwq--持续更新(咕咕咕) 数据结构 数据结构 知识点梳理 数据结构--线段树 推荐yyb dalao的总结--戳我 以后维护线段树还是把l,r写到struct里面吧,也别写le ...

随机推荐

  1. php基础知识和函数

    <?php /* echo "hello","aaaa"; //输出语法,可以输出多个字符串 print "world"; //可以输 ...

  2. PHP商品秒杀倒计时

    <?php //php的时间是以秒算.js的时间以毫秒算 date_default_timezone_set('PRC'); //date_default_timezone_set(" ...

  3. 有关OpenGL着色语言(一)

    刚接触OpenGL着色语言...,不定期增加内容 1.OpenGL着色语言(GLSL)是什么? 用于OpenGL的面向过程的高级着色语言,是近年来图形编程领域中出现的最重要的新型开发技术,使用Open ...

  4. 似是而非的k=sqrt(n)

    //题目:输入一个大于3的整数n,判定它是否为素数(prime,又称质数)#include <stdio.h>#include <math.h>int main(){int n ...

  5. Linux系统中“动态库”和“静态库”那点事儿【转】

    转自:http://blog.chinaunix.net/uid-23069658-id-3142046.html 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻. ...

  6. Java程序编译和运行的过程【转】

    转自:http://www.360doc.com/content/14/0218/23/9440338_353675002.shtml Java整个编译以及运行的过程相当繁琐,本文通过一个简单的程序来 ...

  7. Hibernate,JPA注解@ManyToMany

    @ManyToMany默认处理机制,当双向多对多关联中没有定义任何物理映射时, Hibernate根据以下规则生成相应的值: 关联表名: 主表表名+_下划线+从表表名: 关联到主表的外键名:从表用于关 ...

  8. mina

    http://bsr1983.iteye.com/blog/1886296 http://blog.csdn.net/defonds/article/category/1844073(这个网站原创最全 ...

  9. C#的OpenFileDialog和SaveFileDialog的常见用法(转)

    OpenFileDialog openFileDialog1 = new OpenFileDialog();            openFileDialog1.InitialDirectory = ...

  10. Socket状态变迁图

    在一些防火墙或端口管理工具中经常会看到连接状态为CLOSED CLOSE_WITE LAST_ACK等的进程, 虽然状态就那么很少的几个, 而且看字面意思也能猜个大概, 但没做过Socket编程的朋友 ...