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 ...
随机推荐
- COCOS2D-X之圆形进度条的一个简单Demo
这应该是游戏中很常见的一个效果.显示某个事件的进度等,在加载资源或者联网的时候经常用到.所以有必要学习学习 一.我们直接在COCOS2D-X自带的HelloCpp的工程中添加代码即可.我们在初始化中添 ...
- Linux服务安全之TcpWrapper篇
一.TcpWrapper的定义 任何以xinetd管理的服务都可以通过TcpWrapper来设置防火墙.简单地说,就是针对源IP或域进行允许或拒绝的设置,以决定该连接是否能够成功实现连接. 通过名称我 ...
- HDU ACM 1098 Ignatius's puzzle
分析:裴蜀定理,a,b互质的充要条件是存在整数x,y使ax+by=1.存在整数x,y,使得ax+by=c.那么c就是a,b的公约数. 如果存在数a ,由于对随意x方程都成立.则有当x=1时f(x)=1 ...
- tcp接收xml数据解析
避免tcp接收xml数据时加上xml数据长度,根据xml数据特点来解析recv到的xml数据 int nPos1 = 0; int nPos2 = 0; int nTempPos = 0; int n ...
- Let’s do this!新手程序员的入门指南(转)
计算机科学(Computer Science)无疑是现在最热门的学科之一,这领域的工作薪水高.工作时间弹性,而且科技业对工程师.开发者的需求至今有增无减,科技龙头们随时虎视眈眈着出色的程式开发者.创意 ...
- boost asio io_service学习笔记
构造函数 构造函数的主要动作就是调用CreateIoCompletionPort创建了一个初始iocp. Dispatch和post的区别 Post一定是PostQueuedCompletionSta ...
- 使用JDBC进行数据库的事务操作(1)
本篇讲述数据库中非常重要的事务概念和如何使用MySQL命令行窗口来进行数据库的事务操作.下一篇会讲述如何使用JDBC进行数据库的事务操作. 事务是指数据库中的一组逻辑操作,这个操作的特点就是在该组逻辑 ...
- Swift - 九宫格图片缩放总结样例
1,图片左中右三宫格缩放形式 //左右14像素不变形,中间缩放 let imgTrackRight = UIImage(named:"slider_max") let imgRig ...
- android中,如果使用imageButton可以在drawable 中设置一个selector,但是imageView设置不起作用
android中,如果使用imageButton可以在drawable 中设置一个selector,但是imageView设置不起作用,只要把Imageview的src给去掉就成了,src捕获了bac ...
- go(一)变量
package main import ( "fmt" ) func main() { var a int a = var a1 string a1 = "my is a ...