[补档][Hnoi2013]游走
[Hnoi2013]游走
题目
一个无向连通图,顶点从1编号到N,边从1编号到M。小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分数。当小Z 到达N号顶点时游走结束,总分为所有获得的分数之和。现在,请你对这M条边进行编号,使得小Z获得的总分的期望值最小。INPUT
第一行是正整数N和M,分别表示该图的顶点数 和边数,接下来M行每行是整数u,v(1≤u,v≤N),表示顶点u与顶点v之间存在一条边。 输入保证30%的数据满足N≤10,100%的数据满足2≤N≤500且是一个无向简单连通图。OUTPUT
仅包含一个实数,表示最小的期望值,保留3位小数。SAMPLE
INPUT
3 32 31 21 3OUTPUT
3.333
解题报告
经过点u的次数/u的度
f[1]=1+sigma(f[j]/degree[j],j和1有边相连)
f[i]=sigma(f[j]/degree[j],i与j有边相连)
- #include<algorithm>
- #include<iostream>
- #include<cstring>
- #include<cstdio>
- using namespace std;
- inline int read(){
- int sum();
- char ch(getchar());
- for(;ch<''||ch>'';ch=getchar());
- for(;ch>=''&&ch<='';sum=sum*+(ch^),ch=getchar());
- return sum;
- }
- struct edge{
- int s,e,n;
- }ed[];
- int pre[],tot;
- inline void insert(int s,int e){
- ed[++tot].s=s;
- ed[tot].e=e;
- ed[tot].n=pre[s];
- pre[s]=tot;
- }
- int du[];
- int n,m;
- double a[][],b[],ans[];
- inline double jdz(double x){
- return x>=?x:-x;
- }
- inline void swp(double &a,double &b){
- double c(a);
- a=b;
- b=c;
- }
- inline void gauss(){
- int num,cnt();
- for(int i=;i<n;i++,cnt++){
- num=i;
- for(int j=i+;j<=n;j++)
- if(jdz(a[num][i])<jdz(a[j][i]))
- num=j;
- if(num!=i){
- for(int j=;j<=n;j++)
- swp(a[num][j],a[cnt][j]);
- swp(b[num],b[cnt]);
- }
- if(!a[cnt][i]){
- cnt--;
- continue;
- }
- for(int j=cnt+;j<=n;j++){
- double t(a[j][i]/a[cnt][i]);
- for(int k=i;k<=n;k++)
- a[j][k]-=t*a[i][k];
- b[j]-=t*b[i];
- }
- }
- for(int i=n;i>;i--){
- for(int j=n;j>i;j--)
- b[i]-=a[i][j]*ans[j];
- ans[i]=b[i]/a[i][i];
- }
- }
- double f[];
- bool g[][];
- inline int gg(){
- // freopen("walk.in","r",stdin);
- // freopen("walk.out","w",stdout);
- n=read(),m=read();
- for(int i=;i<=m;i++){
- int x(read()),y(read());
- insert(x,y);
- g[x][y]=g[y][x]=;
- du[x]++,du[y]++;
- }
- du[n]=;
- for(int i=;i<=n;i++){
- if(i==)
- b[i]=;
- else
- b[i]=;
- for(int j=;j<=n;j++){
- if(i==j){
- a[i][j]=;
- continue;
- }
- if(j==n){
- a[i][j]=;
- continue;
- }
- if(g[i][j])
- a[i][j]=-1.0/(double)du[j];
- }
- }
- gauss();
- for(int i=;i<n;i++)
- ans[i]/=du[i];
- ans[n]=;
- for(int i=;i<=tot;i++){
- int s(ed[i].s),e(ed[i].e);
- f[i]=ans[s]+ans[e];
- }
- int cnt(tot);
- sort(f+,f+tot+);
- double an();
- for(int i=;i<=tot;i++)
- an+=i*f[cnt--];
- printf("%.3lf",an);
- return ;
- }
- int k(gg());
- int main(){;}
[补档][Hnoi2013]游走的更多相关文章
- bzoj 3143: [Hnoi2013]游走 高斯消元
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1026 Solved: 448[Submit][Status] ...
- [HNOI2011]XOR和路径 && [HNOI2013]游走
[HNOI2011]XOR和路径 题目大意 具体题目:戳我 题目: 给定一个n个点,m条边的有重边.有自环的无向图,其中每个边都有一个边权. 现在随机选择一条1到n的路径,路径权值为这条路径上所有边权 ...
- BZOJ_3143_[Hnoi2013]游走_期望DP+高斯消元
BZOJ_3143_[Hnoi2013]游走_期望DP+高斯消元 题意: 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机 ...
- P3232 [HNOI2013]游走 解题报告
P3232 [HNOI2013]游走 题目描述 一个无向连通图,顶点从\(1\)编号到\(N\),边从\(1\)编号到\(M\). 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概 ...
- [BZOJ3143][HNOI2013]游走(期望+高斯消元)
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3576 Solved: 1608[Submit][Status ...
- 【BZOJ3143】[Hnoi2013]游走 期望DP+高斯消元
[BZOJ3143][Hnoi2013]游走 Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 ...
- bzoj 3143 [Hnoi2013]游走 期望dp+高斯消元
[Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3394 Solved: 1493[Submit][Status][Disc ...
- BZOJ3141 Hnoi2013 游走 【概率DP】【高斯消元】*
BZOJ3141 Hnoi2013 Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点 ...
- BZOJ 3143 HNOI2013 游走 高斯消元 期望
这道题是我第一次使用高斯消元解决期望类的问题,首发A了,感觉爽爽的.... 不过笔者在做完后发现了一些问题,在原文的后面进行了说明. 中文题目,就不翻大意了,直接给原题: 一个无向连通图,顶点从1编号 ...
随机推荐
- drozer使用
1.启用adb 端口转发 adb forward tcp:314154 tcp:31415 2.启用drozer 3.链接drozer drozer console connect 4:如果没 ...
- ClistCtrl用法及总结(由怎样隐藏ListCtrl列表头的排序小三角形这个bug学习到的知识)
1 怎样隐藏ListCtrl列表头的排序小三角形 在创建控件是加入|LVS_NOSORTHEADER风格即可. 一下是用法总结: 本文根据本人在项目中的应用,来谈谈CListCtrl的部分用法及技巧. ...
- Markdown: 编译pdf
在网上发布博文的时候希望能顺便在本地保存一份记录,这样总结的东西很多的时候就可以写成一本给自己看的小书了.在linux下面有两个选择latex和markdown,虽然latex非常强大,但是很少有博客 ...
- Python 实现 Discuz论坛附件下载权限绕过漏洞
背景:最近压力有些大,想玩点游戏放松下,去Mac论坛下载,发现需要各种权限,于是蛋疼了. 所以,上网查了discuz! x3.1破解,手动替换,发现出现“链接已过期”.所以写了下面程序. 0.将下列代 ...
- Object-C知识点 (二) 控件的实用属性
开发过程中的组件不常用但是很实用的属性!!!!!! p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 20.0px Menlo; color: #78492a ...
- WPF:动态显示或隐藏Listview的某一列
这几天做项目,需要做个listview满足能够动态显示或隐藏某些列,由于自己是菜鸟水平,查了两天资料也没有想出解决办法.就在我山穷水尽的时候看到了Mgen的一篇博客,给了我很大启发,所以我也决定把自己 ...
- ReactNative开发工具有这一篇足矣
ReactNative系列文章: 1.<逻辑性最强的React Native环境搭建与调试> 2.<ReactNative开发工具有这一篇足矣> 正文 React Native ...
- [图形学] Chp17 OpenGL光照和表面绘制函数
这章学了基本光照模型,物体的显示受到以下效果影响:全局环境光,点光源(环境光漫反射分量,点光源漫反射分量,点光源镜面反射分量),材质系数(漫反射系数,镜面反射系数),自身发光,雾气效果等.其中点光源有 ...
- VB6之写注册表
难免会遇到写注册表的情况,写了个实用点的RegWrite函数.为了减少代码量,用WScript.Shell取代了API来实现. 使用方式就在注释中了,就不再过多解释了.PS:注释比实现代码要丰富多了, ...
- win32SDK的hello,world程序(二)
接上篇,原生的控件都不太好看,所以决定自己画一个,稍微处理下消息就能用了.不过,美化这东西是需要天赋的.即使技术再好,没有对UI布局调整和良好的审美能力,做出来的东西还是很挫. 主要把消息逻辑和画的过 ...