UVA 10828 - Back to Kernighan-Ritchie(概率+高斯消元)
UVA 10828 - Back to Kernighan-Ritchie
题意:给图一个流程图,有结点的流程,每次进入下一个流程概率是均等的,有q次询问,求出每次询问结点的运行期望
思路:高斯消元,每一个结点的期望等于全部前趋结点的期望/出度的和,因为存在无限循环的情况,不能直接递推,利用高斯消元去做,推断无解的情况既为无限循环,注意假设一个式自xi为0,可是xn也为0,xi值应该是0,表示无法到达
代码:
#include <cstdio>
#include <cstring>
#include <cmath>
#include <vector>
using namespace std; const int N = 105;
const double eps = 1e-9;
int n, d[N], inf[N];
double a[N][N];
vector<int> pre[N]; void build() {
int u, v;
memset(d, 0, sizeof(d));
for (int i = 0; i < n; i++)
pre[i].clear();
while (~scanf("%d%d", &u, &v) && u) {
u--; v--; d[u]++;
pre[v].push_back(u);
}
memset(a, 0, sizeof(a));
for (int i = 0; i < n; i++) {
a[i][i] = 1;
for (int j = 0; j < pre[i].size(); j++)
a[i][pre[i][j]] = -1.0 / d[pre[i][j]];
if (i == 0) a[i][n] = 1;
}
} void gauss() {
for (int i = 0; i < n; i++) {
int k = i;
for (;k < n; k++)
if (fabs(a[k][i]) > eps) break;
if (k == n) continue;
for (int j = 0; j <= n; j++) swap(a[k][j], a[i][j]);
for (int j = 0; j < n; j++) {
if (i == j) continue;
if (fabs(a[k][i]) > eps) {
double x = a[j][i] / a[i][i];
for (int k = i; k <= n; k++)
a[j][k] -= x * a[i][k];
}
}
}
} void get_inf() {
memset(inf, 0, sizeof(inf));
for (int i = n - 1; i >= 0; i--) {
if (fabs(a[i][i]) < eps && fabs(a[i][n]) > eps) inf[i] = 1;
for (int j = i + 1; j < n; j++)
if (fabs(a[i][j]) > eps && inf[j]) inf[i] = 1;
}
} int main() {
int cas = 0;
while (~scanf("%d", &n) && n) {
build();
gauss();
get_inf();
int q, node;
scanf("%d", &q);
printf("Case #%d:\n", ++cas);
while (q--) {
scanf("%d", &node);
node--;
if (inf[node]) printf("infinity\n");
else printf("%.3lf\n", fabs(a[node][node]) < eps ? 0 : a[node][n] / a[node][node]);
}
}
return 0;
}
UVA 10828 - Back to Kernighan-Ritchie(概率+高斯消元)的更多相关文章
- UVa 10828 Back to Kernighan-Ritchie (数学期望 + 高斯消元)
题意:给定一个 n 个结点的有向图,然后从 1 结点出发,从每个结点向每个后继结点的概率是相同的,当走到一个没有后继结点后,那么程序终止,然后问你经过每个结点的期望是次数是多少. 析:假设 i 结点的 ...
- 洛谷2973 [USACO10HOL]赶小猪Driving Out the Piggi… 概率 高斯消元
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - 洛谷2973 题意概括 有N个城市,M条双向道路组成的地图,城市标号为1到N.“西瓜炸弹”放在1号城市,保证城 ...
- [BZOJ2337][HNOI2011]XOR和路径(概率+高斯消元)
直接不容易算,考虑拆成位处理. 设f[i]表示i到n的期望路径异或和(仅考虑某一位),则$f[y]=\sum\limits_{exist\ x1\to y=0}\frac{f[x1]}{d[x1]}+ ...
- BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡 [高斯消元 概率DP]
1778: [Usaco2010 Hol]Dotp 驱逐猪猡 题意:一个炸弹从1出发p/q的概率爆炸,否则等概率走向相邻的点.求在每个点爆炸的概率 高斯消元求不爆炸到达每个点的概率,然后在一个点爆炸就 ...
- BZOJ 3143 HNOI2013 游走 高斯消元 期望
这道题是我第一次使用高斯消元解决期望类的问题,首发A了,感觉爽爽的.... 不过笔者在做完后发现了一些问题,在原文的后面进行了说明. 中文题目,就不翻大意了,直接给原题: 一个无向连通图,顶点从1编号 ...
- UVA 10828 Back to Kernighan-Ritchie(高斯消元)
高斯消元求概率 对于非起点,期望x[i] = ∑x[j] / deg[j] #include<cstdio> #include<iostream> #include<cs ...
- 【BZOJ-3143】游走 高斯消元 + 概率期望
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2264 Solved: 987[Submit][Status] ...
- 【BZOJ-3270】博物馆 高斯消元 + 概率期望
3270: 博物馆 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 292 Solved: 158[Submit][Status][Discuss] ...
- 【概率DP/高斯消元】BZOJ 2337:[HNOI2011]XOR和路径
2337: [HNOI2011]XOR和路径 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 682 Solved: 384[Submit][Stat ...
随机推荐
- hdu5338 ZZX and Permutations
hdu5338 ZZX and Permutations 非原创,来自多校题解 不是自己写的,惭愧ing…… 留着以后自己参考…… lower_bound {1,2,4,5} 询问 2,返回的是 2 ...
- 怎样制作一个相似Tiny Wings的游戏 Cocos2d-x 2.1.4
在第一篇<怎样使用CCRenderTexture创建动态纹理>基础上,添加�创建动态山丘,原文<How To Create A Game Like Tiny Wings with C ...
- xml总结图--(来自传智播客视频资料)
- 【linux】内核+文件系统下载到开发板
K开发 欢迎转载,转载时请保留作者信息,谢谢. 邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:htt ...
- 一个能够自己主动生成静态库,自己主动安装程序的Makefile
.PHONY:clean install CC=g++ CFLAGS=-Wall -g BIN=libecho.a INCLUDE=echo SRC=src OBJS=Socket.o Rio.o T ...
- spring boot application properties配置详解
# =================================================================== # COMMON SPRING BOOT PROPERTIE ...
- hdu3072
Intelligence System Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- Eclipse在点击运行后不能自动保存的解决
今天在eclipse上写程序调试时,发现当我点击运行按键之后,并不能在运行前帮我自动保存,也就是说每次修改代码之后, 运行的还是前一次运行之前的代码,并不是修改之后的代码,因此通过在网上搜索解决方案之 ...
- Android菜鸟的成长笔记(7)——什么是Activity
原文:[置顶] Android菜鸟的成长笔记(7)——什么是Activity 前面我们做了一个小例子,在分析代码的时候我们提到了Activity,那么什么是Activity呢? Activity是An ...
- 14.2.4 InnoDB Undo Logs
14.2.4 InnoDB Undo Logs : 一个Undo log (或者成为回滚段) 是一个存储区域 持有被活动事务修改的数据的copy. 如果另外的事务需要看原始的数据(作为一致性读操作的一 ...