zoukankan      html  css  js  c++  java
  • bzoj 3143: [Hnoi2013]游走

    高斯消元 对于边可能很多,那我们计录点的期望次数就行了。

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 #include<cstdlib>
     5 #include<cmath>
     6 #include<queue>
     7 #include<algorithm>
     8 #include<vector>
     9 #define M 1009
    10 #define EPS 1e-10
    11 #define MO 19650827
    12 #define ll long long
    13 using namespace std;
    14 ll read()
    15 {
    16     char ch=getchar();
    17     ll x=0,f=1;
    18     for(;ch<'0'||ch>'9';ch=getchar())
    19         if(ch=='-')
    20           f=-1;
    21     for(;ch>='0'&&ch<='9';ch=getchar())
    22         x=x*10+ch-'0';
    23     return x*f;
    24 }
    25 int n,m,du[M],u[M*M],v[M*M];
    26 double a[M][M],b[M*M];
    27 void gao()
    28 {
    29   for(int i=1;i<=n;i++)
    30     {
    31       int k=i;
    32       for(;k<=n&&!a[k][i];k++);
    33       if(!a[k][i])
    34         break;
    35       for(int j=1;j<=n+1;j++)
    36         swap(a[k][j],a[i][j]);
    37       double a1=a[i][i];
    38       for(int j=1;j<=n+1;j++)
    39         a[i][j]/=a1;
    40       for(int j=1;j<=n;j++)
    41         if(i!=j&&a[j][i])
    42           {
    43             a1=a[j][i];
    44             for(int k=1;k<=n+1;k++)
    45               a[j][k]-=a[i][k]*a1;
    46           }
    47     }
    48 }
    49 int main()
    50 {
    51    n=read();
    52    m=read();
    53    for(int i=1;i<=m;i++)
    54      {
    55        u[i]=read();
    56        v[i]=read();
    57        du[u[i]]++;
    58        du[v[i]]++;
    59        a[u[i]][v[i]]=-1;
    60        a[v[i]][u[i]]=-1;
    61      }
    62    for(int i=1;i<n;i++)
    63      for(int j=1;j<=n;j++)
    64        a[i][j]/=du[j];
    65    for(int i=1;i<=n;i++)
    66      a[n][i]=0;
    67    a[1][n+1]=1;
    68    for(int i=1;i<=n;i++)
    69      a[i][i]=1;
    70    gao();
    71    for(int i=1;i<=m;i++)
    72      {
    73          b[i]+=a[u[i]][n+1]/du[u[i]];
    74          b[i]+=a[v[i]][n+1]/du[v[i]];
    75      }
    76    sort(b+1,b+m+1);
    77    double ans=0;
    78    for(int i=1;i<=m;i++)
    79      ans+=b[i]*(m-i+1);
    80    printf("%.3lf
    ",ans);
    81    return 0;
    82 }
  • 相关阅读:
    【Java基础】List迭代并修改时出现的ConcurrentModificationException问题
    【Java基础】Integer包装类的缓冲池问题
    【Java基础】基本类型的包装类作为参数传递是值传递还是引用传递
    【Java基础】关于String的总结
    Mac IDEA快捷键积累
    POJ1273 Drainage Ditches
    BZOJ2763 飞行路线
    NOIP2018 货币系统
    BZOJ2748 音量调节
    BZOJ1721 Ski Lift 缆车支柱
  • 原文地址:https://www.cnblogs.com/xiw5/p/5654675.html
Copyright © 2011-2022 走看看