Luogu3232 HNOI2013 游走 高斯消元、期望、贪心
这种无向图上从一个点乱走到另一个点的期望题目好几道与高斯消元有关
首先一个显然的贪心:期望经过次数越多,分配到的权值就要越小。
设$du_i$表示$i$的度,$f_i$表示点$i$的期望经过次数(我们认为经过表示需要从这个点走出去,所以$f_N=0$),考虑到一条边$(u,v)$经过次数的期望为$\frac{f_u}{du_u}+\frac{f_v}{du_v}$,我们只需要求出$f$数组就可以求出每一条边对应的期望经过次数了。
对于$f$数组,类似于$DP$,我们可以列出一系列式子:$f_u=\frac{1}{du_u}\sum\limits_{(u,v) \in e} f_v+[u==1]$(因为$1$号点是起点,所以需要$+1$),而$f_N=0$,也就是有$N$个未知数、$N$个方程,那么我们可以通过高斯消元得到每一个$f_u$,然后这道题就做完了qaq
#include<bits/stdc++.h>
#define ld long double
#define eps 1e-10
//This code is written by Itst
using namespace std;
inline int read(){
;
;
char c = getchar();
while(c != EOF && !isdigit(c)){
if(c == '-')
f = ;
c = getchar();
}
while(c != EOF && isdigit(c)){
a = (a << ) + (a << ) + (c ^ ');
c = getchar();
}
return f ? -a : a;
}
;
ld gauss[MAXN][MAXN] , now[MAXN * MAXN] , ans;
struct Edge{
int end , upEd;
}Ed[MAXN * MAXN * ];
int N , M , cntEd , du[MAXN] , head[MAXN];
inline void addEd(int a , int b){
Ed[++cntEd].end = b;
Ed[cntEd].upEd = head[a];
head[a] = cntEd;
}
inline bool equal(ld a , ld b){
return a - eps < b && a + eps > b;
}
bool cmp(ld a , ld b){
return a > b;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("3232.in" , "r" , stdin);
//freopen("3232.out" , "w" , stdout);
#endif
N = read();
M = read();
; i <= M ; ++i){
int a = read() , b = read();
addEd(a , b);
addEd(b , a);
++du[a];
++du[b];
}
; i < N ; ++i){
gauss[i][i] = ;
for(int j = head[i] ; j ; j = Ed[j].upEd)
if(Ed[j].end != N)
gauss[i][Ed[j].end] = -1.0 / du[Ed[j].end];
}
gauss[][N + ] = ;
; i < N ; ++i){
int j = i;
))
++j;
if(j != i)
; ++k)
swap(gauss[i][i] , gauss[j][i]);
while(++j <= N)
, gauss[j][i]))
; k >= i ; --k)
gauss[j][k] -= gauss[i][k] / gauss[i][i] * gauss[j][i];
}
; i ; --i){
gauss[i][N + ] /= gauss[i][i];
gauss[i][i] = ;
; j ; --j)
, gauss[j][i])){
gauss[j][N + ] -= gauss[j][i] * gauss[i][N + ];
gauss[j][i] = ;
}
}
; i <= cntEd ; i += ){
now[(i + ) >> ] = gauss[Ed[i].end][N + ] / du[Ed[i].end] + gauss[Ed[i + ].end][N + ] / du[Ed[i + ].end];
}
sort(now + , now + M + , cmp);
; i <= M ; ++i)
ans += i * now[i];
printf("%.3Lf" , ans);
;
}
Luogu3232 HNOI2013 游走 高斯消元、期望、贪心的更多相关文章
- BZOJ 3143 HNOI2013 游走 高斯消元 期望
这道题是我第一次使用高斯消元解决期望类的问题,首发A了,感觉爽爽的.... 不过笔者在做完后发现了一些问题,在原文的后面进行了说明. 中文题目,就不翻大意了,直接给原题: 一个无向连通图,顶点从1编号 ...
- bzoj 3143: [Hnoi2013]游走 高斯消元
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1026 Solved: 448[Submit][Status] ...
- BZOJ3143:[HNOI2013]游走(高斯消元)
Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点, ...
- 【BZOJ-3143】游走 高斯消元 + 概率期望
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2264 Solved: 987[Submit][Status] ...
- [HNOI2013][BZOJ3143] 游走 - 高斯消元
题目描述 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边 ...
- 【BZOJ3143】【HNOI2013】游走 高斯消元
题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3143 我们令$P_i$表示从第i号点出发的期望次数.则$P_n$显然为$0$. 对于$P ...
- 【xsy1201】 随机游走 高斯消元
题目大意:你有一个$n*m$的网格(有边界),你从$(1,1)$开始随机游走,求走到$(n,m)$的期望步数. 数据范围:$n≤10$,$m≤1000$. 我们令 $f[i][j]$表示从$(1,1) ...
- HDU2262;Where is the canteen(高斯消元+期望)
传送门 题意 给出一张图,LL从一个点等概率走到上下左右位置,询问LL从宿舍走到餐厅的步数期望 分析 该题是一道高斯消元+期望的题目 难点在于构造矩阵,我们发现以下结论 设某点走到餐厅的期望为Ek 1 ...
- [luogu3232 HNOI2013] 游走 (高斯消元 期望)
传送门 题目描述 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等 ...
随机推荐
- 【读书笔记】iOS-“一心多用”利用多线程提升性能
iPhone将具有支持不同类型多线程API的能力,这些API包括:POSIX线程,NSObject,NSThread和NSOperation. iPhone操作系统是一个真正的抢占式,多任务操作系统, ...
- nginx-1-初识nginx
Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由Igor Sysoev为俄罗斯访问量第二的R ...
- Selenium Webdriver 动态设置 Proxy
Step 1: Visiting "about:config" driver.get("about:config"); Step 2 : Run script ...
- 小技巧-mac修改finder菜单栏
效果: 方法: 添加:打开finder后,长按command,可以将其他app拖到菜单栏. 删除:同理,长按command,将不需要的图标拖出菜单栏即可. PS:强烈推荐gotoshell这个小工具, ...
- [20180626]函数与标量子查询14.txt
[20180626]函数与标量子查询14.txt --//前面看http://www.cnblogs.com/kerrycode/p/9099507.html链接,里面提到: 通俗来将,当使用标量子查 ...
- 洗礼灵魂,修炼python(44)--巩固篇—反射之重新认识hasattr,gettattr,setattr,delattr
不急着进入正题.先动手完成一个小程序: 设计一套简单的服务开启关闭程序,每次开启或关闭都得打印服务当前的状态: class Server(object): def __init__(self): se ...
- Sql Server 判断字符串是否可以转数字
主要是在sql server的内置系统函数ISNUMERIC的基础上,将例外的“+”.“-”.“$”等也进行判断. CREATE FUNCTION [dbo].[fn_IsNumberic]( @st ...
- HDU ACM 2066 一个人的旅行
一个人的旅行 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- 第七章 鼠标(CONNECT)
/* CONNECT.C -- Connect-the-Dots Mouse Demo Program (c) Charles Petzold,1998 */ #include <Windows ...
- Calling Matlab function from python: “initializer must be a rectangular nested sequence”
I am writing a python script from which I hope to call the Matlab anovan function. I have attempted ...