【Luogu】P3232游走(高斯消元解概率)
参见远航之曲dalao的题解,我再写一遍的话就没啥意思了。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cctype>
#include<cstdlib>
#include<cmath>
#define maxn 505
using namespace std;
inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} double s[maxn][maxn]; double indl[maxn]; struct Edge{
int next,to;
}edge[maxn*maxn];
int head[maxn],num;
inline void add(int from,int to){
edge[++num]=(Edge){head[from],to};
head[from]=num;
} struct Node{
int from,to;double p;
bool operator <(const Node &a)const{ return p<a.p; }
}q[maxn*maxn]; double ans[maxn]; int main(){
int n=read(),m=read();
for(int i=;i<=m;++i){
int x=read(),y=read();
indl[x]++; indl[y]++;
add(x,y);
add(y,x);
q[i]=(Node){x,y,};
}
for(int i=;i<n;++i){
s[i][i]=;
for(int j=head[i];j;j=edge[j].next){
int to=edge[j].to;
if(to!=n) s[i][to]=-/indl[to];
}
}
s[][n]=;
for(int i=;i<n;++i){
int now=i;
for(int j=i+;j<n;++j)
if(fabs(s[now][i])<fabs(s[j][i])) now=j;
if(now^i) swap(s[now],s[i]);
double ret=s[i][i];
for(int j=i;j<=n;++j) s[i][j]/=ret;
for(int j=i+;j<n;++j){
ret=s[j][i];
for(int k=;k<=n;++k) s[j][k]-=ret*s[i][k];
}
} ans[n-]=s[n-][n];
for(int i=n-;i;--i){
ans[i]=s[i][n];
for(int j=i+;j<n;++j) ans[i]-=ans[j]*s[i][j];
} for(int i=;i<=m;++i) q[i].p=ans[q[i].from]/indl[q[i].from]+ans[q[i].to]/indl[q[i].to];
sort(q+,q+m+);
double fin=;
for(int i=;i<=m;++i) fin+=q[i].p*(m-i+);
printf("%.3lf",fin);
return ;
}
【Luogu】P3232游走(高斯消元解概率)的更多相关文章
- [HNOI2013][BZOJ3143] 游走 - 高斯消元
题目描述 一个无向连通图,顶点从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] ...
- BZOJ 3143 HNOI2013 游走 高斯消元 期望
这道题是我第一次使用高斯消元解决期望类的问题,首发A了,感觉爽爽的.... 不过笔者在做完后发现了一些问题,在原文的后面进行了说明. 中文题目,就不翻大意了,直接给原题: 一个无向连通图,顶点从1编号 ...
- bzoj 3143: [Hnoi2013]游走 高斯消元
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1026 Solved: 448[Submit][Status] ...
- 【xsy1201】 随机游走 高斯消元
题目大意:你有一个$n*m$的网格(有边界),你从$(1,1)$开始随机游走,求走到$(n,m)$的期望步数. 数据范围:$n≤10$,$m≤1000$. 我们令 $f[i][j]$表示从$(1,1) ...
- Luogu3232 HNOI2013 游走 高斯消元、期望、贪心
传送门 这种无向图上从一个点乱走到另一个点的期望题目好几道与高斯消元有关 首先一个显然的贪心:期望经过次数越多,分配到的权值就要越小. 设$du_i$表示$i$的度,$f_i$表示点$i$的期望经过次 ...
- 【BZOJ3143】【HNOI2013】游走 高斯消元
题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3143 我们令$P_i$表示从第i号点出发的期望次数.则$P_n$显然为$0$. 对于$P ...
- First Knight UVALive - 4297(优化高斯消元解概率dp)
题意: 一个矩形区域被分成 m*n 个单元编号为 (1, 1)至 (m, n),左上为 (1, 1),右下为(m, n).给出P(k)i,j,其中 1 ≤ i ≤ m,1 ≤ j ≤ n,1 ≤ k ...
- BZOJ3143:[HNOI2013]游走(高斯消元)
Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点, ...
随机推荐
- 将Java应用部署到SAP云平台neo环境的两种方式
方法1 - 使用Eclipse Eclipse里新建一个服务器: 服务器类型选择SAP Cloud Platform: 点Finish,成功创建了一个Server: Eclipse里选择要部署的项目, ...
- CodeForces 66C Petya and File System (实现)
模拟题,map搞一搞.要想清楚一个结点应该是要通过一个字符串找到下一个结点,题目保证所以文件夹非空,所以只要判断一个结点是不是叶子结点就可以判断它是不是文件,用了点c11的特性. #include&l ...
- 2018.5.5 phpStorm破解2017.3版本方法
方法一 注册时,在打开的License Activation窗口中选择"License server",在输入框输入下面的网址: http://im.js.cn:8888 (新) ...
- solver
slover中有type,用于优化算法的选择,有6种: Stochastic Gradient Descent (type: “SGD”), AdaDelta (type: “AdaDelta”), ...
- 剑指offer58 二叉树的下一个结点
自己写的 class Solution { public: TreeLinkNode* GetNext(TreeLinkNode* pNode) { if(pNode == NULL) return ...
- C++类和结构体的区别
C++类和结构体的区别? 结构体默认数据访问控制是public; 类默认数据访问控制是private;
- shell脚本,awk里面的BEGIN讲解。
解释: BEGIN{}这个特殊的pattern最常用的就是 变量赋值. BEGIN这个pattern就是文件没开始读的时候 执行 awk 'BEGIN{FS=":";OFS=&qu ...
- 01_5_删除指定id的单个对象
01_5_删除指定id的单个对象 1. 配置相应的映射文件内容 <delete id="deleteStudent" parameterClass="int&quo ...
- pandas删除及其映射修改操作。
1.使用drop_duplicates()函数删除重复的行 df.drop_duplicates() 2.映射 映射的含义,创建一个映射关系,把values元素和一个特定的标签或字符串绑定 map = ...
- jenkins 插件