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的结点开始.你的任务是对于若干个查询结点,求出每个结点的期望执行次 ...
随机推荐
- 杭电 2037 今年暑假不AC
Problem Description “今年暑假不AC?”“是的.”“那你干什么呢?”“看世界杯呀,笨蛋!”“@#$%^&*%...” 确实如此,世界杯来了,球迷的节日也来了,估计很多ACM ...
- python接口测试之序列化与反序列化(四)
在python中,序列化可以理解为:把python的对象编码转换为json格式的字符串,反序列化可以理解为:把json格式 字符串解码为python数据对象.在python的标准库中,专门提供了jso ...
- HASH的应用(负数下标用偏移量解决)
Input 每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个处于区间[-500000,500000]的整数. Output 对每组测试数据按从大到小的 ...
- 转盘抽奖 canvas & 抽奖 H5 源码
转盘抽奖 canvas https://github.com/givebest/wechat-turntalbe-canvas https://blog.givebest.cn/GB-canvas-t ...
- 【SGU194&ZOJ2314】Reactor Cooling(有上下界的网络流)
题意: 给n个点,及m根pipe,每根pipe用来流躺液体的,单向的,每时每刻每根pipe流进来的物质要等于流出去的物质,要使得m条pipe组成一个循环体,里面流躺物质. 并且满足每根pipe一定的流 ...
- Linux下汇编语言学习笔记60 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- Nginx 的 server_names_hash_bucket_size 问题
在 Nginx 0.6.35 的版本中,配置多个 server 虚拟主机,必须要在配置文档中 http { 里头加上 server_names_hash_bucket_size 64; 这么一句 ht ...
- [bzoj1578][Usaco2009 Feb]Stock Market 股票市场_完全背包dp
Stock Market 股票市场 bzoj-1578 Usaco-2009 Feb 题目大意:给定一个$S\times D$的大矩阵$T$,其中$T[i][j]$表示第i支股票第j天的价格.给定初始 ...
- VMware配置从U盘启动
很遗憾,VMware的BIOS不能识别USB启动设备,即使已经把USB设备连接上去. 解决这一问题的做法是直接添加硬盘,硬盘指向物理硬盘,即USB设置. 注意:Ubuntu下要设置这一功能需要使用su ...
- 大话设计模式C++实现-第8章-工厂方法模式
一.UML图 二.概念 工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法是一个类的实例化延迟到其子类. 三.包括的角色 (1)抽象工厂 (2 ...