zoukankan      html  css  js  c++  java
  • BZOJ 3143 高斯消元+贪心....

    思路:
    先算一下每条边经过次数的期望 转化为每个点经过次数的期望
    边的期望=端点的期望/度数
    统计一下度数 然后高斯消元
    贪心附边权…….

    //By SiriusRen
    #include <cmath>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    #define eps 1e-10
    int n,m,d[250050];double a[505][505],b[250050],ans;
    struct Point{int x,y;}e[250050];
    void Gauss(){
        int i,j,k;double t;
        for(i=1;i<=n;i++){
            for(j=i;j<=n;j++)if(fabs(a[j][i])>eps)break;
            if(j>n)continue;if(j!=i)swap(a[i],a[j]);
            for(j=i+1;j<=n;j++)if(fabs(a[j][i]>eps)){
                t=a[j][i]/a[i][i];
                for(k=i;k<=n+1;k++)a[j][k]-=t*a[i][k]; 
            }
        }
        for(int i=n;i;i--){
            for(int j=i+1;j<=n;j++)a[i][n+1]-=a[i][j]*a[j][n+1];
            a[i][n+1]/=a[i][i];
        }
    }
    int main(){
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;i++)
            scanf("%d%d",&e[i].x,&e[i].y),
            d[e[i].x]++,d[e[i].y]++;
        for(int i=1;i<=m;i++)
            a[e[i].x][e[i].y]+=1.0/d[e[i].y],
            a[e[i].y][e[i].x]+=1.0/d[e[i].x];
        for(int i=1;i<=n;i++)a[n][i]=0;
        for(int i=1;i<=n;i++)a[i][i]=-1;
        a[1][n+1]=-1;Gauss();
        for(int i=1;i<=m;i++)b[i]=a[e[i].x][n+1]/d[e[i].x]+a[e[i].y][n+1]/d[e[i].y];
        sort(b+1,b+1+m);
        for(int i=1;i<=m;i++)ans+=b[i]*(m-i+1);
        printf("%.3lf
    ",ans);
    }

    这里写图片描述

  • 相关阅读:
    排序算法 之 冒泡排序 插入排序 希尔排序 堆排序
    DataStructure之线性表以及其实现
    使用可重入函数进行更安全的信号处理
    内存经济学
    电脑通用技能
    循环套餐的逻辑
    占用了多少内存
    索引的用法
    电脑的眼缘
    字符串积木
  • 原文地址:https://www.cnblogs.com/SiriusRen/p/6532101.html
Copyright © 2011-2022 走看看