jzoj3221 【HNOI2013】游走

Problem

一个无向连通图,顶点从1 编号到N,边从1 编号到M。
小Z 在该图上进行随机游走,初始时小Z 在1 号顶点,每一步小Z 以相等的概率随机选择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分数。当小Z到达N 号顶点时游走结束,总分为所有获得的分数之和。
现在,请你对这M 条边进行编号,使得小Z 获得的总分的期望值最小。
n<=500

比较简单的一题,连我都能想到。写一下主要是因为我觉得他包含了许多图+概率的问题与高斯消元要注意的地方。
设g[i]为经过i点的期望次数。
1. 将1点拆分是个不错的选择,让g[1]表示再一次经过1的期望,最后记得加上1。起点所带来的贡献在常数项中加上。
2. 终点是没有向外的贡献的,注意:为了不对最终的f造成影响,消元完毕后g[n]应强制设为0,正常消元完毕g[n]必定等于1,因为步数无穷大+连通,所以肯定进一次(不能出来。)
3. 高斯消元回代有搞基更方便的方法,具体见代码。

#include <cstdio>
#include <iostream>
#include <algorithm>
#define maxn 510
using namespace std;
int n,m;
double a[maxn][maxn],d[maxn],g[maxn],f[maxn*maxn];
int e[maxn*maxn][2],use[maxn],cho[maxn];
void AR(int x,int y) {
    if (y!=n) a[x][y]+=1/d[y];
    if (y==1) a[x][0]-=1/d[1];

    if (x!=n) a[y][x]+=1/d[x];
    if (x==1) a[y][0]-=1/d[1];
}
void gauss() {
    for (int i=1; i<=n; i++) {
        for (int j=1; j<=n; j++)  if (a[j][i]!=0 && use[j]==0) {
            use[j]=1;
            cho[i]=j;
            double t=a[j][i],ts;

            for (int k=0; k<=n; k++) a[j][k]/=t;
            for (int z=1; z<=n; z++) if (use[z]==0 && a[z][i]!=0) {
                t=a[z][i];
                for (int k=0; k<=n; k++) a[z][k]=a[z][k]/t-a[j][k];
            }
            break;
        }
    }
    for (int i=n; i; i--) {
        g[i]=a[cho[i]][0]/a[cho[i]][i];
        for (int j=1; j<=n; j++) a[j][0]-=a[j][i]*g[i];
    }
}
int main() {
    freopen("3221.in","r",stdin);
    scanf("%d %d",&n,&m);
    for (int i=1; i<=n; i++) a[i][i]=-1;
    for (int i=1; i<=m; i++) {
        scanf("%d %d",&e[i][0],&e[i][1]);
        d[e[i][0]]++,d[e[i][1]]++;
    }
    for (int i=1; i<=m; i++) AR(e[i][0],e[i][1]);
    gauss();
    g[1]+=1; g[n]-=1; //g[n]=0;
    for (int i=1; i<=m; i++) f[i]=g[e[i][0]]/d[e[i][0]]+g[e[i][1]]/d[e[i][1]];
    sort(f+1,f+1+m);
    double ans=0;
    for (int i=1; i<=m; i++) ans+=i*f[m-i+1];
    printf("%.3lf",ans);
}
### 回答1: 树莓派4B是一款功能强大的微型电脑,能够运行广泛的操作系统。其中,ubuntu 20.04镜像是一种适用于树莓派4B的操作系统镜像。它支持完整的Ubuntu桌面环境基于命令行的终端环境,能够满足不同用户的需求。 树莓派4B ubuntu 20.04镜像采用64位ARM架构,性能更加优异,支持更多的应用程序工具。其中,包括了许多常用的软件包,如文本编辑器、网络浏览器、多媒体播放器等等。此外,用户还可以通过Ubuntu软件中心安装更多的应用程序工具,扩展系统的功能应用范围。 使用树莓派4B ubuntu 20.04镜像,用户可以进行丰富的实验开发工作。通过安装相关软件包工具,用户可以构建智能家居、物联网应用、机器学习系统、网络服务器等等。此外,Ubuntu系统具有稳定性安全性,能够保证系统的安全运行数据的保护。 总之,树莓派4B ubuntu 20.04镜像是一种强大、灵活安全的操作系统镜像,能够满足不同用户的需求,适用于各种实验开发工作。 ### 回答2: 树莓派4b是由Raspberry Pi基金会推出的一款小型计算机,其性价比高、易用性强、体积小巧等特点受到了广大DIY爱好者科技爱好者的青睐。而Ubuntu 20.04则是一款十分优秀的Linux操作系统,与树莓派上的Raspbian系统相比,Ubuntu更加高效、开放、简洁。 在树莓派4b上安装Ubuntu 20.04镜像,需要下载相应镜像文件,并通过SD等介质进行启动安装。Ubuntu 20.04为树莓派4b用户提供了全面的支持优化,具有良好的稳定性可靠性,同时还提供了多种开发工具软件包,能够满足用户的各种需求。 另外,在Ubuntu 20.04上还可以安装许多第三方软件工具,如Python、ROS、Web服务、数据库等,可扩展性极高。同时,该操作系统还提供了图形化界面命令行界面,方便用户进行操作开发。 总之,树莓派4b配合Ubuntu 20.04镜像,为用户提供了极高的性能简便的开发环境,满足了科技爱好者对嵌入式计算机的各种需求。 ### 回答3: 树莓派4B是一款非常实用的单板计算机,它能够运行多个操作系统,并支持各种应用程序。而Ubuntu 20.04镜像,则是其中一种为树莓派4B开发的操作系统版本。这种镜像是基于Ubuntu的LTS版本,提供了更加稳定高效的运行环境。 使用树莓派4B ubuntu 20.04镜像,用户可以通过命令行或者桌面界面进行操作,也可以安装各种应用程序,如Python、Java、Node.js等。此外,镜像还提供了完整的Linux操作系统环境,包括通用磁盘文件系统,各种系统工具命令等功能。 值得一提的是,在使用树莓派4B ubuntu 20.04镜像时,用户还需要预置SD,并将镜像烧录SD中进行启动。接下里,用户可以通过Wi-Fi、有线网络或USB外接存储等方式进行连接。 总的来说,树莓派4B ubuntu 20.04镜像可以让用户充分利用树莓派4B的性能,实现各种自己所需的运算或项目。因此,它大受开发人员或计算机爱好者的欢迎,同时也为树莓派4B的应用提供了更多的选择空间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值