zoj 2853 Evolution(矩阵快速幂)
来源:互联网 发布:打印机usb端口设置 编辑:程序博客网 时间:2024/06/06 14:06
Evolution is a long, long process with extreme complexity and involves many species. Dr. C. P. Lottery is currently investigating a simplified model of evolution: consider that we haveN (2 <= N <= 200) species in the whole process of evolution, indexed from 0 to N -1, and there is exactly one ultimate species indexed as N-1. In addition, Dr. Lottery divides the whole evolution process into M (2 <= M <= 100000) sub-processes. Dr. Lottery also gives an 'evolution rate' P(i, j) for 2 species i and j, where i and j are not the same, which means that in an evolution sub-process, P(i, j) of the population of species i will transform to species j, while the other part remains unchanged.
Given the initial population of all species, write a program for Dr. Lottery to determine the population of the ultimate species after the evolution process. Round your final result to an integer.
Input
The input contains multiple test cases!
Each test case begins with a line with two integers N, M. After that, there will be a line with N numbers, indicating the initial population of each species, then there will be a number Tand T lines follow, each line is in format "i j P(i,j)" (0 <= P(i,j) <=1).
A line with N = 0 and M = 0 signals the end of the input, which should not be proceed.
Output
For each test case, output the rounded-to-integer population of the ultimate species after the whole evolution process. Write your answer to each test case in a single line.
Notes
- There will be no 'circle's in the evolution process.
- E.g. for each species i, there will never be a path i, s1, s2, ..., st, i, such that P(i,s1) <> 0, P(sx,sx+1) <> 0 and P(st, i) <> 0.
- The initial population of each species will not exceed 100,000,000.
- There're totally about 5 large (N >= 150) test cases in the input.
Example
Let's assume that P(0, 1) = P(1, 2) = 1, and at the beginning of a sub-process, the populations of 0, 1, 2 are 40, 20 and 10 respectively, then at the end of the sub-process, the populations are 0, 40 and 30 respectively.
Sample Input
2 3
100 20
1
0 1 1.0
4 100
1000 2000 3000 0
3
0 1 0.19
1 2 0.05
0 2 0.67
0 0
Sample Output
120
0
代码:
#include <iostream>#include <cstdio>#include <cstring>using namespace std;struct mat{ double t[201][201]; void set() { memset(t,0,sizeof(t)); }} a,b;mat multiple(mat a,mat b,int n){ int i,j,k; mat temp; temp.set(); for(i=0; i<n; i++) for(j=0; j<n; j++) { if(a.t[i][j]>0) for(k=0; k<n; k++) temp.t[i][k]+=a.t[i][j]*b.t[j][k]; } return temp;}mat quick_mod(mat b,int n,int m){ mat t; t.set(); for(int i=0; i<n; i++) t.t[i][i]=1.0; while(m) { if(m&1) { t=multiple(t,b,n); } m>>=1; b=multiple(b,b,n); } return t;}void init(int n,int m){ int x,y,k; double z; double t[201]; for(int i=0; i<n; i++) scanf("%lf",&t[i]); cin>>k; b.set(); for(int i=0; i<n; i++) b.t[i][i]=1.0; while(k--) { scanf("%d%d%lf",&x,&y,&z); b.t[x][x]-=z; b.t[y][x]+=z; } a=quick_mod(b,n,m); double sum=0; for(int i=0;i<n;i++) { sum+=a.t[n-1][i]*t[i]; } printf("%.0lf\n",sum);}int main(){ int n,m; while(cin>>n>>m) { if(!n&&!m) break; init(n,m); } return 0;}
- zoj 2853 Evolution(矩阵快速幂)
- 【矩阵快速幂】ZOJ 2853 Evolution
- ZOJ 2853 Evolution[ 矩阵快速幂 ]
- zoj 2853 Evolution 矩阵快速幂
- ZOJ 2853 Evolution【矩阵快速幂】
- ZOJ 2853 Evolution【矩阵快速幂】
- 矩阵快速幂 ZOJ 2853 Evolution
- ZOJ 2853 Evolution (矩阵快速幂+数学)
- Evolution +zoj+矩阵快速幂
- zoj 2853 Evolution 矩阵
- Evolution(矩阵快速幂)
- ZOJ 2853 Evolution (矩阵块速幂)
- 矩阵快速幂ZOJ
- zoj 2853 Evolution
- zoj 2853 Evolution
- ZOJ 2853Evolution
- ZOJ 3497 Mistwald(矩阵快速幂)
- ZOJ 3497 Mistwald(矩阵快速幂)
- 平板电脑市场为何销量增长缓慢?平板电脑未解决需求问题
- 常见可控硅带驱动 光耦 三极管 电阻三种方式
- 220M!华为海思率先搞定TD-LTE载波聚合
- LeetCode: Multiply Strings [042]
- 发个自定义Xshell颜色主题Color Schemes
- zoj 2853 Evolution(矩阵快速幂)
- 一辈子不长,活的就是一种心情
- 析构函数
- Keen Team: 这群执著的人和那些纯粹的事
- phpStorm打开提示 failed to create JVM 的解决办法
- LeetCode – Remove Duplicates from Sorted Array II (Java)
- 如何配置一个好用的Android模拟器
- 字典树入门及实现(JAVA)
- Mysql 默认参数的修改