【BZOJ 3143】 [Hnoi2013]游走 期望DP|高斯消元|贪心
2016-03-24 19:14
369 查看
每个 val表示 这个点经过几次
这样就明白了 我开始迷惑好长时间
没注意内存re3发 也是没谁了
这样就明白了 我开始迷惑好长时间
#include <cstdio> #include <cmath> #include <iostream> #include <algorithm> using namespace std; const int MAXN=500+10; const double EPS=1e-6; double val[MAXN*MAXN],f[MAXN][MAXN],ans[MAXN*MAXN]; int n,m,g[MAXN][MAXN],d[MAXN],s[MAXN*MAXN],t[MAXN*MAXN]; void gauss() { for(int i=1;i<n;i++) { int t=i; for(int j=i;j<n;j++) if(abs(f[i][j])>EPS){t=i;break;} if(i!=t) 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--) { val[i]=f[i] /f[i][i]; for(int j=i-1;j>=1;j--) f[j] -=val[i]*f[j][i]; } } int main() { cin >>n >>m; for(int i=1;i<=m;i++) { scanf("%d %d",&s[i],&t[i]); g[s[i]][t[i]]++; g[t[i]][s[i]]++; d[s[i]]++; d[t[i]]++; } for(int i=1;i<n;i++) for(int j=1;j<n;j++) { if(i==j) f[i][j]=1; else f[i][j]=-1.0*g[j][i]/d[j]; } f[1] =1; gauss(); for(int i=1;i<=m;i++) ans[i]=val[s[i]]/d[s[i]]+val[t[i]]/d[t[i]]; sort(ans+1,ans+m+1); double out=0; for(int i=1;i<=m;i++) out+=ans[i]*(m-i+1); printf("%.3lf",out); return 0; }
没注意内存re3发 也是没谁了
相关文章推荐
- 【程序人生】:腾讯的职级系统
- 《世界是数字的》读后感
- iOS技术之批量下载
- 戏说 TCP 三次握手 四次挥手
- 3.24
- 探讨对理想团队模式构建的设想及软件流程的理解
- 第四周第五项目——用递归方法实现阶乘调用
- [转] HashMap和HashSet的区别
- About toString()方法
- 上位机、下位机的初略解释
- python-language/tips/
- [洛谷][P1503][鬼子进村][Treap]
- 父进程下的两个子进程通过管道进行通信
- [转] HashMap的工作原理
- 洛谷 P1579
- 使用java通过Get请求进行爬虫操作
- 响应式网站技巧
- 矩阵快速幂的学习
- [ECshop系统]ECShop验证码短信接口插件(2.7.3 UTF-8版)高级版V2
- java NIO 和阻塞I/O的区别