题目链接

戳我

\(Solution\)

首先申明几个变量:

f[x]:到点x的概率,

vis[x]:x点的度

dp[x][y]:(x,y)这条边的概率

number[x][y]:x这条边的编号

下面的式子保证存在一条(x,y)的边

我们可以知道总分的期望为:

\[\sum dp[x][y]*number[x][y]
\]

即:所有边的期望成这条边的编号的和

那么\(dp\)数组怎么算呢?

\[dp[x][y]=\frac{f[x]}{vis[x]}+\frac{f[y]}{vis[y]}
\]

所以我们现在的任务就是求出\(f\)数组

再来看看\(f\)数组怎么求?

\[p[x]=\sum\frac{p[y]}{vis[y]}
\]

发现这个式子并不能简单的递推,因为存在环.

于是我们可以列方程接未知数

运用高斯消元就好了.

但是注意:

  • 如果有点和\(n\)相连,那么在计算期望时不需要算,因为到了点\(n\)时不会继续走下去了
  • 因为开始就在点\(1\),所以第一个方程的结果要设为\(1\)

解出方程后便可以将\(dp\)数组算出来了.

现在考虑原问题: "现在,请你对这M条边进行编号,使得小Z获得的总分的期望值最小"

我们可以进行贪心

将期望大的边使他编号小

\(Code\)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int read(){
int x=0,f=1;char c=getchar();
while(c<'0'||c>'9') f=(c=='-')?-1:1,c=getchar();
while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
return x*f;
}
struct node{
int to,next;
}e[5000010];
int vis[5000010],head[10000001],n,m,cnt,X[1000001],Y[10000001];
void add(int x,int y){
e[++cnt].to=y,e[cnt].next=head[x],head[x]=cnt;
}
double a[5001][5001],f[1000001],ans=0;
void Gauss(){
n--,a[1][n+1]=-1;
for(int i=1; i<=n; i++) {
int bj=i;
for(int j=i+1; j<=n; j++)
if(fabs(a[j][i])>fabs(a[bj][i]))
bj=j;
for(int j=1; j<=n+1; j++)
swap(a[bj][j],a[i][j]);
if(!a[i][i])
continue;
double p=a[i][i];
for(int j=1;j<=n+1;j++)
a[i][j]/=p;
for(int j=1;j<=n;j++)
if(i!=j){
double o=a[j][i];
for(int k=1;k<=n+1;k++)
a[j][k]-=a[i][k]*o;
}
}
for(int i=n-1; i>=1; i--)
for(int j=i+1; j<=n; j++)
a[i][n+1]-=a[j][n+1]*a[i][j];
}
int main() {
n=read(),m=read();
for(int i=1;i<=m;i++)
X[i]=read(),Y[i]=read(),add(Y[i],X[i]),add(X[i],Y[i]),vis[X[i]]++,vis[Y[i]]++;
for(int i=1;i<n;i++){
a[i][i]=-1;
for(int j=head[i];j;j=e[j].next){
int v=e[j].to;
if(v!=n)
a[i][v]=1.0/vis[v];
}
}
Gauss();
for(int i=1; i<=m; i++){
if(X[i]!=n+1)
f[i]+=a[X[i]][n+1]/vis[X[i]];
if(Y[i]!=n+1)
f[i]+=a[Y[i]][n+1]/vis[Y[i]];
}
sort(f+1,f+1+m);
for(int i=1;i<=m;i++)
ans+=f[i]*(m-i+1);
printf("%0.3lf",ans);
return 0;
}

「HNOI 2013」游走的更多相关文章

  1. 「专题训练」游走(BZOJ-3143)

    题意与分析 定义走到每条边的期望为\(e_i\),一开始的想法是给定一个\(\large\sum_{i=1}^n e_i a_i\),求一个a的排列使得这个和最小.问题在于这样等于没对题目作分析,而且 ...

  2. 「HNOI 2013」比赛

    题目链接 戳我 \(Solution\) 这道题观察数据范围发现很小,再看看题目可以发现是搜索. 这题纯搜索会\(T\)所以要加入适当剪枝 如果一个人后面的比赛都赢却依旧到不了目标分数,则直接\(re ...

  3. 「HNOI 2013」消毒

    题目链接 戳我 \(Solution\) 我们首先想一想如果这一题只是二维的该怎么办? 就是一个最小点覆盖问题.这里就不详细解释了,用网络流或匈牙利都无所谓. 但现在是三维的,那么现在该如何处理呢? ...

  4. 「HNOI 2013」数列

    题目链接 戳我 \(Solution\) 这道题貌似并不难的样子\(QAQ\) 我们发现这个因为有首项的关系所以有点不太好弄.所以我们要将这个首项对答案的影响给去掉. 我们可以构建一个差分数组,我们令 ...

  5. 「HNOI2013」游走

    「HNOI2013」游走 题目描述 一个无向连通图,顶点从 \(1\) 编号到 \(N\) ,边从 \(1\) 编号到 \(M\) .小 \(Z\) 在该图上进行随机游走,初始时小 \(Z\) 在 \ ...

  6. LOJ#3054. 「HNOI 2019」鱼

    LOJ#3054. 「HNOI 2019」鱼 https://loj.ac/problem/3054 题意 平面上有n个点,问能组成几个六个点的鱼.(n<=1000) 分析 鱼题,劲啊. 容易想 ...

  7. 「HNOI/AHOI2018」道路

    传送门 Luogu 解题思路 考虑树形 \(\text{DP}\) 设状态 \(dp[u][i][j]\) 表示从首都走到点 \(u\) ,经过 \(i\) 条公路,\(j\) 条铁路的最小不方便值. ...

  8. Solution -「HNOI 2007」「洛谷 P3185」分裂游戏

    \(\mathcal{Description}\)   Link.   给定 \(n\) 堆石子,数量为 \(\{a_n\}\),双人博弈,每轮操作选定 \(i<j\le k\),使 \(a_i ...

  9. 「HNOI 2019」白兔之舞

    一道清真的数论题 LOJ #3058 Luogu P5293 题解 考虑$ n=1$的时候怎么做 设$ s$为转移的方案数 设答案多项式为$\sum\limits_{i=0}^L (sx)^i\bin ...

随机推荐

  1. 【转】tcp_tw_recycle和tcp_timestamps导致connect失败问题

    (2012-02-01 18:40:32)     近来线上陆续出现了一些connect失败的问题,经过分析试验,最终确认和proc参数tcp_tw_recycle/tcp_timestamps相关: ...

  2. iOS学习之UITableView中Cell的操作

    接着iOS学习之Table View的简单使用 这篇,这里主要讲UITableView 中的Cell的操作,包括标记.移动.删除.插入. 为了简单快捷,直接从原来那篇的代码开始,代码下载地址:http ...

  3. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 18—Photo OCR 应用实例:图片文字识别

    Lecture 18—Photo OCR 应用实例:图片文字识别 18.1 问题描述和流程图 Problem Description and Pipeline 图像文字识别需要如下步骤: 1.文字侦测 ...

  4. DEV上肤

    1,在Main中加入此语句DevExpress.UserSkins.BonusSkins.Register();SkinManager.EnableFormSkins();DevExpress.Loo ...

  5. linux安装wifi驱动,开热点

    本次安装的debian系统安装的时候提示wifi硬件需要安装非自由固件才能运行,并告诉本硬件要安装的固件名字叫做iwlwifi-2030-6.ucode.是iwlwifi驱动适配我的wireless硬 ...

  6. Codeforces 76D 位运算

    题意:给你两个数x 和 y, x = a + b, y = a XOR b,问有没有合法的a和b满足这个等式? 思路:有恒等式: a + b = ((a & b) << 1) + ...

  7. cocos2dx 屏幕分辨率问题

    做手机上的软件首先要考虑的就是屏幕分辨率怎么解决.coco2dx已经有了很好的解决方法. 用cocos2dx的python脚本创建工程时默认生成一个Helloworld的demo.我们就以这个demo ...

  8. Source Insight: has been changed outside of Source Insight

    has been changed outside of Source Insight 2018年04月26日 09:41:01 linux_c_coding_man 阅读数:247 摘自:https: ...

  9. hdu 4068 I-number

    #include<stdio.h> #include<string.h> ]; int al; int mysum() //求各位和 { ; al=strlen(a); ; i ...

  10. Python Socket实现简单的聊天室

    通过参考其他牛人的文章和代码,  再根据自己的理解总结得出,  说明已经加在注释中, FYI 主要参考文章: http://blog.csdn.net/dk_zhe/article/details/3 ...