uva10828
https://vjudge.net/problem/UVA-10828
裸高斯消元。。。
但是要判无解和无穷解。
当出现一个环时会无解,环上每个点只有一个出边。
#include<bits/stdc++.h>
using namespace std;
const int N = ;
const double eps = 1e-;
int n, q;
double a[N][N], d[N];
vector<int> G[N];
int mark[N];
void build()
{
a[][n + ] = -1.0;
for(int i = ; i <= n; ++i)
{
a[i][i] = -1.0;
for(int j = ; j < G[i].size(); ++j)
a[i][G[i][j]] += 1.0 / d[G[i][j]];
}
}
void gauss_jordan()
{
for(int now = ; now <= n; ++now)
{
int x = now;
for(int i = now + ; i <= n; ++i) if(fabs(a[i][now]) > fabs(a[x][now])) x = i;
if(fabs(a[x][now]) < eps) continue;
for(int i = ; i <= n + ; ++i) swap(a[now][i], a[x][i]);
double t = a[now][now];
for(int i = now; i <= n + ; ++i) a[now][i] /= t;
for(int i = ; i <= n; ++i) if(i != now)
{
double t = a[i][now];
for(int j = now; j <= n + ; ++j) a[i][j] -= a[now][j] * t;
}
}
}
int main()
{
int T = ;
while(scanf("%d", &n))
{
++T;
if(n == ) break;
memset(d, , sizeof(d));
memset(a, , sizeof(a));
memset(mark, , sizeof(mark));
while()
{
int a, b; scanf("%d%d", &a, &b);
if(a == && b == ) break;
G[b].push_back(a);
d[a] += 1.0;
}
build();
gauss_jordan();
for(int i = n; i; --i)
{
if(fabs(a[i][i]) < eps && fabs(a[i][n + ]) > eps)
mark[i] = ;
for(int j = i + ; j <= n; ++j) if(fabs(a[i][j]) > eps && mark[j]) mark[i] = ;
}
scanf("%d", &q);
printf("Case #%d:\n", T);
while(q--)
{
int x; scanf("%d", &x);
if(mark[x]) puts("infinity");
else if(fabs(a[x][x]) < eps) puts("0.000");
else printf("%.3f\n", fabs(a[x][n + ] / a[x][x]));
}
for(int i = ; i <= n; ++i) G[i].clear();
}
return ;
}
uva10828的更多相关文章
- UVA-10828 (概率期望+高斯消元)
题意: 给个有向图,每个节点等概率转移到它的后继节点,现在问一些节点的期望访问次数; 思路: 对于一个点v,Ev=Ea/d[a]+Eb/d[b]+Ec/d[c];a,b,c是v的前驱节点; 然后按这个 ...
- UVa10828 Back to Kernighan-Ritchie——概率转移&&高斯消元法
题意 给出一个程序控制流图,从每个结点出发到每个后继接结点的概率均相等.当执行完一个没有后继的结点后,整个程序终止.程序总是从编号为1的结点开始.你的任务是对于若干个查询结点,求出每个结点的期望执行次 ...
随机推荐
- jQuery对table排序
<script> //col对应列,cmp两数比较方法,返回值为TRUE,FALSE function sort(col, cmp) { var table = $("#test ...
- python 中文转码 Excel读csv
大家都知道Excel读csv用的是ascii编码,我认为,ascii没有中文,所以这里指的应该是utf-8. 我遇到的问题是这样的,unity项目只能用txt文件,有一堆数据表用txt的文档保存下来了 ...
- 前端开发:HTML
静态页面: 没有与用户进行交互,而仅仅是用户浏览的一个网页 动态网页:就是用户不仅仅可以浏览网页,还可以与服务器交互 Web前端应用场景:公司官网(在PC通过浏览器访问公司网站).移动端网页(在手机上 ...
- es6常用语法和特性
简介 首先,在学习之前推荐使用在线转码器 Traceur 来测试 Demo,避免 babel 下的繁琐配置,从而产生畏难情绪. let 命令 在 ES6 之前,JS 只能使用 var 声明变量,或者省 ...
- Spring Data Jpa系列教程--------实体解析和关联关系
Spring Data Jpa是基于HIbernate开发的,所以建立实体建的实体和映射关系需要好好好的去了解一下,本文有以下内容,实体管理器介绍,实体与数据库表的映射介绍,关联关系(一对多,多对多) ...
- 2018/3/14 Hadoop学习笔记(一)
首先,什么是Hadoop?为什么它是现在大数据处理最热门的框架呢?(正确来说,现在Hadoop是一个生态圈) Hadoop是apache下一套开源的服务框架,它主要的作用就是利用服务器集群,来对海量数 ...
- POJ 2828 Buy Tickets (线段树 || 树状数组)
题目大意 一些小朋友在排队,每次来一个人,第i个人会插到第x个人的后面.权值为y.保证x∈[0,i-1]. 按照最后的队伍顺序,依次输出每个人的权值. 解题分析 好气吖.本来是在做splay练习,然后 ...
- Linux下汇编语言学习笔记65 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- JAVA程序—HelloWorld 的编译运行
在我们写好我们的"HelloWorld.java",并且搭建好JAVA的开发环境过后,便可以运行这个JAVA程序了. 具体如何实现,让我们来看看: 打开DOS 通过DOS命令转到& ...
- SpringBoot 基于jjwt快速实现token授权
1.添加maven依赖注解 <!--JJWT库--> <dependency> <groupId>io.jsonwebtoken</groupId> & ...