P3232 [HNOI2013]游走
吐槽
傻了傻了,对着题解改了好长时间最后发现是自己忘了调用高斯消元了。。。
思路
期望题,分配编号,显然编号大的分给贡献次数小的,所以需要知道每个边被经过次数的期望
然后边被经过的次数的期望就是连接的两个点到它的次数的期望求和,点走哪条边次数的期望相等(都是1/度数)
然后就是求每个点的次数的期望,正推,高斯消元
注意因为计算的是次数的期望,所以f1要加上1(开局经过一次)且所有的点都不能从fn转移来(因为到n就结束了,所以消元的时候也不用管fn
代码
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#define int long long
#define double long double
using namespace std;
const double eps=1e-9;
int n,m,u[1010000],v[1010000],fir[1010],nxt[1010000],d[1010],cnt;
double a[510][510],ans=0,Ex[1010000];
struct Edge{
int u,v;
}E[1010000];
void gauss(void){
for(int i=1;i<n;i++){
for(int j=i;j<n;j++){
if(fabs(a[j][i])>eps){
for(int k=1;k<=n;k++)
swap(a[i][k],a[j][k]);
break;
}
}
for(int j=1;j<n;j++){
if(j==i)
continue;
double rate=a[j][i]/a[i][i];
for(int k=i;k<=n;k++)
a[j][k]=a[j][k]-rate*a[i][k];
}
}
for(int i=1;i<n;i++)
a[i][n]=a[i][n]/a[i][i];
return;
}
void addedge(int ui,int vi){
++cnt;
u[cnt]=ui;
v[cnt]=vi;
d[ui]++;
nxt[cnt]=fir[ui];
fir[ui]=cnt;
}
void build(void){
// a[n][n]=1;
a[1][n]=1;
for(int i=1;i<n;i++){
a[i][i]+=1;
// a[i][n+1]+=1;
for(int j=fir[i];j;j=nxt[j]){
if(v[j]!=n)
a[i][v[j]]-=1.0/d[v[j]];
}
}
}
signed main(){
scanf("%lld %lld",&n,&m);
for(int i=1;i<=m;i++){
int a,b;
scanf("%lld %lld",&a,&b);
addedge(a,b);
addedge(b,a);
E[i].u=a;
E[i].v=b;
}
build();
gauss();
for(int i=1;i<=m;i++){
Ex[i]+=a[E[i].u][n]/d[E[i].u];
Ex[i]+=a[E[i].v][n]/d[E[i].v];
}
sort(Ex+1,Ex+m+1);
for(int i=1,j=m;i<=m;i++,j--)
ans=ans+j*Ex[i]*1.0;
printf("%.3Lf\n",ans);
return 0;
}
P3232 [HNOI2013]游走的更多相关文章
- P3232 [HNOI2013]游走 解题报告
P3232 [HNOI2013]游走 题目描述 一个无向连通图,顶点从\(1\)编号到\(N\),边从\(1\)编号到\(M\). 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概 ...
- 题解 P3232 [HNOI2013]游走
洛谷P3232[NOI2013]游走 题目描述 给定一个 n 个点 m 条边的无向连通图,顶点从 1 编号到 n,边从 1 编号到 m. 小 Z 在该图上进行随机游走,初始时小 Z 在 1 号顶点,每 ...
- P3232 [HNOI2013]游走——无向连通图&&高斯消元
题意 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编 ...
- 洛谷P3232[HNOI2013]游走
有一个无向简单连通图,顶点从 \(1\) 编号到 \(n\),边从 \(1\) 编号到 \(m\) 小Z在该图上进行随机游走,初始时小Z在\(1\)号顶点,每一步小Z以相等的概率随机选 择当前顶点的某 ...
- [bzoj3143] [洛谷P3232] [HNOI2013] 游走
Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点, ...
- BZOJ 3143 Luogu P3232 [HNOI2013]游走 (DP、高斯消元)
题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=3143 (luogu) https://www.luogu.org/pro ...
- 洛谷 P3232 [HNOI2013]游走
链接: P3232 题意: 和上次考试 T4 的简化且无修改一样,经典图上高斯消元求期望. 分析: 要求出每个点的期望出发次数 \(f_i\),每个点度数为 \(d_i\),有 \[f1=\sum\d ...
- 洛谷P3232 [HNOI2013]游走(高斯消元+期望)
传送门 所以说我讨厌数学……期望不会高斯消元也不会……好不容易抄好了高斯消元板子被精度卡成琪露诺了…… 首先,我们先算出走每一条边的期望次数,那么为了最小化期望,就让大的期望次数乘上小编号 边的期望次 ...
- bzoj 3143: [Hnoi2013]游走 高斯消元
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1026 Solved: 448[Submit][Status] ...
随机推荐
- jdk自动安装java_home 无法修改解决方法
使用命令行修改 cmd下set java_home=D:\soft\java\jdk1.7.0_72 搞定
- jQuery事件--keypress([[data],fn])和trigger(type,[data])
keypress([[data],fn]) 概述 当键盘或按钮被按下时,发生 keypress 事件 keypress 事件与 keydown 事件类似.当按钮被按下时,会发生该事件.它发生在当前获得 ...
- 【2017-03-10】T-sql基础语句及条件,高级查询
一.T-sql基础语句 1.创建数据库:create database 数据库名 (不能中文,不能数字开头,不能符号开头) 2.删除数据库:drop database 数据库名 3.选择数据库:us ...
- MVC中修改Table值
记录下: 遇到这样一个问题,表中有一个Char栏位,为1/0 ,只是在视图界面 让其显示为 开始/结束, 目前想到的两种解决办法: ①后台写查询的SQL时,直接写 SELECT a.Status, ( ...
- 解决caffe绘制训练过程的loss和accuracy曲线时候报错:paste: aux4.txt: 没有那个文件或目录 rm: 无法删除"aux4.txt": 没有那个文件或目录
我用的是faster-rcnn,在绘制训练过程的loss和accuracy曲线时候,抛出如下错误,在网上查找无数大牛博客后无果,自己稍微看了下代码,发现,extract_seconds.py文件的 g ...
- HashMap的底层实现原理
HashMap的底层实现原理1,属性static final int MAX_CAPACITY = 1 << 30;//1073741824(十进制)0100000000000000000 ...
- HTTPS 之共享秘钥 公钥 及 私钥
HTTPS 之共享秘钥 公钥 及 私钥一 共享秘钥1.1 概念共享秘钥和我们生活中同一把锁的钥匙概念类似,对同一把锁来说,加锁时使用什么钥匙,解锁也必须使用同样的钥匙. 1.2 共享秘钥在HTTP传输 ...
- flask实战-个人博客-使用蓝本模块化程序
使用蓝本模块化程序 实例化flask提供的blueprint类就创建一个蓝本实例.像程序实例一样,我们可以为蓝本实例注册路由.错误处理函数.上下文处理函数,请求处理函数,甚至是单独的静态文件文件夹和模 ...
- JustOj 2038: 叶神的字符串
题目描述 众所周知,ACS协会会长叶神学习特别好,算法能力也强,作为一个弱渣的大豪哥特别崇拜叶神,觉得‘Y’‘S’这两个字符特别厉害,所以大豪哥的一个键盘上就只有Y,S两个键,大豪哥用这个键盘打出了一 ...
- 五一 DAY2
DAY 2 比如:依次输入 3 1 5 4 2 插入 6 这里FZdalao有一个很巧妙的构造,直接吧输入的数字排成一个二 ...