【Vijos 1966】 夜夜的旅游计划|期望DP|高斯消元|信心题QAQ

来源:互联网 发布:久其软件股份 编辑:程序博客网 时间:2024/04/27 21:37

做高斯消元忽然想起以前的一个比赛 便拿来水水啦

同时也对期望DP又有啦一个新的认识!!!!抓狂

提醒下最后一个点一直wa的


#include <cmath>#include <cstdio>#include <iostream>#include <algorithm> using namespace std;const double EPS=1e-7;const int MAXN=200+10;int n,m,d[MAXN],v[MAXN][MAXN];double ans[MAXN],f[MAXN][MAXN];void gauss(){for(int i=1;i<n;i++){int t;for(int j=i;j<n;j++) if(abs(f[i][j])>EPS) {t=i;break;}if(t!=i) for(int j=i;j<=n;j++) swap(f[i][j],f[t][j]);for(int j=i+1;j<n;j++){double tmp=f[j][i]/f[i][i];for(int k=i;k<=n;k++) f[j][k]-=tmp*f[i][k];}}for(int i=n-1;i>=1;i--){ans[i]=f[i][n]/f[i][i];for(int j=i-1;j>=1;j--)f[j][n]-=f[j][i]*ans[i];}}int main(){cin >>n >>m;for (int i=1;i<=m;i++){int x,y,z;scanf("%d %d %d",&x,&y,&z);d[x]++;d[y]++;v[x][y]=v[y][x]=z;}for(int i=1;i<n;i++)for(int j=1;j<n;j++){if(i==j) f[i][j]=1*d[i];else if(v[i][j]!=0){f[i][j]=-1.0;f[i][n]+=(double)v[i][j];}}for(int i=1;i<n;i++) if(v[i][n]!=0)f[i][n]+=(double)v[i][n];gauss();printf("%.1lf",ans[1]);return 0;}


0 0
原创粉丝点击