BZOJ 1778 Usaco2010 Hol Dotp 驱逐猪猡 期望DP+高斯消元

题目大意:给定一个无向图,,炸弹从1号节点出发,每个时刻有P/Q的概率爆炸,如果某个时刻没有爆炸,就会等概率沿着随机一条出边走到下一个城市,求最终每个城市的爆炸概率

#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define M 330using namespace std;int n,m,p,q;int degree[M];double rate;double f[M][M],ans[M];void Gauss_Elimination(){int i,j,k;for(i=1;i<=n;i++){k=i;for(j=i+1;j<=n;j++)if( fabs(f[j][i]) > fabs(f[k][i]) )k=j;for(j=i;j<=n+1;j++)swap(f[i][j],f[k][j]);for(j=i+1;j<=n;j++){double temp=-f[j][i]/f[i][i];for(k=i;k<=n+1;k++)f[j][k]+=f[i][k]*temp;}}for(i=n;i;i–){for(j=i+1;j<=n;j++)f[i][n+1]-=f[i][j]*ans[j];ans[i]=f[i][n+1]/f[i][i];}}int main(){int i,j,x,y;cin>>n>>m>>p>>q;if(p>q) p=q;rate=(double)p/q;for(i=1;i<=m;i++){scanf("%d%d",&x,&y);degree[x]++;degree[y]++;f[x][y]+=1.0;f[y][x]+=1.0;}for(i=1;i<=n;i++)for(j=1;j<=n;j++)if(degree[j])//注意除零f[i][j]/=degree[j];for(i=1;i<=n;i++)for(j=1;j<=n;j++)f[i][j]*=rate-1;for(i=1;i<=n;i++)f[i][i]+=1.0;f[1][n+1]=rate;Gauss_Elimination();for(i=1;i<=n;i++)printf("%.9lf\n",ans[i]);return 0;}

没有什么可留恋,只有抑制不住的梦想,

BZOJ 1778 Usaco2010 Hol Dotp 驱逐猪猡 期望DP+高斯消元

相关文章:

你感兴趣的文章:

标签云: