期望dp+高斯消元——bzoj3143
比较经典的题,题解看网上的。。https://www.cnblogs.com/GXZlegend/p/7054536.html
自己sort弄错了。。还以为是高斯消元写歪了。。
#include<bits/stdc++.h>
using namespace std; const int maxn = ;
const double esp = 1e-; struct Edge{int u,v;double E;}e[maxn*maxn];
int mp[maxn][maxn],d[maxn],n,m;
double E[maxn][maxn],b[maxn];
int cmp(Edge a,Edge b){return a.E>b.E;} void guass(){
for(int i=;i<=n;i++){
int maxx=i;
for(int j=i;j<=n;j++){
if(fabs(E[j][i])>esp&&fabs(E[j][i])>fabs(E[maxx][i]))maxx=j;
}
if(maxx!=i){
swap(E[maxx],E[i]);
swap(b[maxx],b[i]);
} if(fabs(E[i][i])<esp)continue;
for(int j=i+;j<=n;j++){
if(fabs(E[j][i])<esp)continue;
double rate=E[j][i]/E[i][i];
for(int k=i;k<=n;k++)
E[j][k]-=rate*E[i][k];
b[j]-=rate*b[i];
}
} for(int i=n;i>=;i--){
if(fabs(E[i][i])<esp)continue;
for(int j=i+;j<=n;j++)
b[i]-=E[i][j]*b[j];
b[i]/=E[i][i];
}
} int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++){
int u,v;
scanf("%d%d",&u,&v);
mp[u][v]=mp[v][u]=;
d[u]++;d[v]++;
e[i].u=u;e[i].v=v;
} //建立矩阵
E[n][n]=b[]=;
for(int i=;i<n;i++){
E[i][i]=;
for(int j=;j<=n;j++)
if(mp[i][j])E[i][j]-=1.0/d[j];
}
guass(); for(int i=;i<=m;i++){
int u=e[i].u,v=e[i].v;
e[i].E=b[u]/d[u] + b[v]/d[v];
}
sort(e+,e++m,cmp);
double ans=;
for(int i=;i<=m;i++)
ans+=e[i].E*i;
printf("%.3lf\n",ans);
}
期望dp+高斯消元——bzoj3143的更多相关文章
- BZOJ_3143_[Hnoi2013]游走_期望DP+高斯消元
BZOJ_3143_[Hnoi2013]游走_期望DP+高斯消元 题意: 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机 ...
- 【BZOJ3143】[Hnoi2013]游走 期望DP+高斯消元
[BZOJ3143][Hnoi2013]游走 Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 ...
- bzoj3143 游走 期望dp+高斯消元
题目传送门 题意: 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得 ...
- BZOJ3143: [Hnoi2013]游走(期望DP 高斯消元)
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3597 Solved: 1618[Submit][Status][Discuss] Descript ...
- HDU 2262 Where is the canteen 期望dp+高斯消元
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2262 Where is the canteen Time Limit: 10000/5000 MS ...
- hdu4418 Time travel 【期望dp + 高斯消元】
题目链接 BZOJ4418 题解 题意:从一个序列上某一点开始沿一个方向走,走到头返回,每次走的步长各有概率,问走到一点的期望步数,或者无解 我们先将序列倍长形成循环序列,\(n = (N - 1) ...
- 【noi2019集训题1】 脑部进食 期望dp+高斯消元
题目大意:有n个点,m条有向边,每条边上有一个小写字母. 有一个人从1号点开始在这个图上随机游走,游走过程中他会按顺序记录下走过的边上的字符. 如果在某个时刻,他记录下的字符串中,存在一个子序列和S2 ...
- LightOJ 1151 Snakes and Ladders 期望dp+高斯消元
题目传送门 题目大意:10*10的地图,不过可以直接看成1*100的,从1出发,要到达100,每次走的步数用一个大小为6的骰子决定.地图上有很多个通道 A可以直接到B,不过A和B大小不确定 而且 ...
- P4457-[BJOI2018]治疗之雨【期望dp,高斯消元】
正题 题目链接:https://www.luogu.com.cn/problem/P4457 题目大意 开始一个人最大生命值为\(n\),剩余\(hp\)点生命,然后每个时刻如果生命值没有满那么有\( ...
随机推荐
- LINUX内核及应用程序移植工作
1. 添加工作用户 [root@localhost ~]#useradd -G root -g root -d/home/arm arm 2. 建立工作目录 [arm@localhost arm]$m ...
- 试探回溯法(backtracking)
一.八皇后问题 国际象棋中皇后的势力范围覆盖其所在的水平线.垂直线以及两条对角线.现考查如下问题:在n*n的棋盘上放置n个皇后,如何使得她们彼此互不攻击,此时称她们构成一个可行的棋局.对于任何整数n ...
- QT开发资料
QT开发入门资料 https://tmr.js.org/p/cc37608/ QT学习之路: https://www.devbean.net/
- selenium如何操作页面树状列表
selenium如何操作页面树状列表??举个例子:我要怎么操作如下图所示的树状结构列表?我要对这个树状结构列表做什么操作? 一.思路 1.根据driver.find_element_by_xpath( ...
- js 数组排序 根据两个字段属性
var task = [ {name:"aa", taskLevel:"3",createTime:"2019-12-18"}, {name ...
- 【缓存】缓存穿透、缓存雪崩、key重建方案
一.缓存穿透预防及优化 缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中,但是出于容错的考虑,如果从存储层查不到数据则不写入缓存层,如图 11-3 所示整个过程分为如下 3 步: 缓存层 ...
- "\r\n"与"</br>"的区别
\n是换行,英文是New line,表示使光标到行首 \r是回车,英文是Carriage return,表示使光标下移一格 \r\n表示回车换行 \\ 反斜杠 \$ 美圆符 \" 双引 ...
- 下面是一段delphi代码,你在c# 中引入api 即可
procedure TForm1.Button1Click(Sender: TObject);var i:HWND; cs:CREATESTRUCT;begin// i := FindWindowEx ...
- NX二次开发-UFUN更改图纸页比例UF_DRAW_set_drawing_info
#include <uf.h> #include <uf_draw.h> #include <uf_part.h> UF_initialize(); //获得当前图 ...
- python从入门到大神---4、python3文件操作最最最最简单实例
python从入门到大神---4.python3文件操作最最最最简单实例 一.总结 一句话总结: python文件操作真的很简单,直接在代码中调用文件操作的函数比如open().read(),无需引包 ...