zoukankan      html  css  js  c++  java
  • bzoj1778 驱赶猪猡/luogu2937 赶小猪

    Description

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

    bzoj权限题,题目大概是机翻?

    bzoj3270的双倍经验题(然而我大于小于分不清楚还WA了一发)

    //%std
    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cmath>
    #include<vector>
    #include<queue>
    #include<stack>
    #include<set>
    #include<map>
    using namespace std;
    #define lovelive long long
    #define lc son[x][0]
    #define rc son[x][1]
    #define lowbit(x) (x&(-x))
    #define pt vc
    #define P(x,y) ((x)*n-n+y)
    const int N=300+30;
    void read(int &x)
    {
      int p=1;
      x=0;
      char c=getchar();
      while(c<'0'||c>'9')
      {
        if(c=='-')
          p=-1;
        c=getchar();
      }
      while(c>='0'&&c<='9')
      {
          x=x*10+c-48;
          c=getchar();
      }
      x*=p;
    }
    double f[N][N],ans[N];
    int mp[N][N],d[N];
    void gauss(int n)
    {
      int k;
      double tmp;
      for(int i=1;i<n;i++)
      {
          k=i;
          for(int j=i+1;j<=n;j++)
            if(fabs(f[i][i])<fabs(f[j][i]))
              k=j;
        for(int j=1;j<=n+1;j++)
          swap(f[i][j],f[k][j]);
        for(int j=i+1;j<=n;j++)
        {
          tmp=f[j][i]/f[i][i];
          for(int k=i;k<=n+1;k++)
            f[j][k]-=f[i][k]*tmp;
        }
      }
      for(int i=n;i>=1;i--)
      {
          ans[i]=f[i][n+1]/f[i][i];
        for(int j=i-1;j>=1;j--)
          f[j][n+1]-=ans[i]*f[j][i];
      }
    }
    int main()
    {
    //  freopen("testdata.in","r",stdin);
    //  freopen("testdata.out","w",stdout);
      int n,m,a,b,x,y;
      double p;
      read(n);read(m);read(a);read(b);
      p=a*1.0/b;
      for(int i=1;i<=m;i++)
      {
          read(x);read(y);
          mp[x][y]=mp[y][x]=1;
          ++d[x];++d[y]; 
      }
      for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
          if(mp[i][j])
              f[i][j]=(1-p)/d[j];
      for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
          f[i][j]=-f[i][j];
      for(int i=1;i<=n;i++)
        f[i][i]+=1;
      f[1][n+1]=1;
      gauss(n);
      for(int i=1;i<=n;i++)
        printf("%.9lf
    ",ans[i]*p);
      return 0;
    }
    View Code

    听说bzoj坑点很多

    但是我在luogu上交的很顺利

  • 相关阅读:
    1093. Count PAT's (25)
    1092. To Buy or Not to Buy (20)
    机器学习实战——k-邻近算法:约会网站
    1057. Stack (30)
    1017. Queueing at Bank (25)
    strcpy、strncpy和memcpy的用法比较
    华为笔试题--蛇形矩阵
    对于内核执行过程的理解
    pom.xml格式问题
    Json反序列化遇到的问题
  • 原文地址:https://www.cnblogs.com/NicoDafaGood/p/8849539.html
Copyright © 2011-2022 走看看