[HNOI2013]游走 期望+高斯消元
纪念首道期望题(虽说绿豆蛙的归宿才是,但是我打的深搜总觉得不正规)。
我们求出每条边的期望经过次数,然后排序,经过多的序号小,经过少的序号大,这样就可以保证最后的值最小。
对于每一条边的期望经过次数,其实是从它起点和终点来的。设f[]为每个点经过的期望,out[]为每个点的出度
设一条边,起点为u,终点为v。那么它的期望经过次数为f[u]/out[u]+f[v]/out[v]
这样问题就转化为求每个点的期望经过次数了
f[1]=1+sigma(f[j]/out(j),j和1有边)
f[i]=sigma(f[j]/out(j),j和i有边) //i>=2
这是n个变量n个方程的方程组,高斯消元解方程组,O(n^3)
#include<iostream> #include<cstdlib> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; #define pos(i,a,b) for(int i=(a);i<=(b);i++) #define pos2(i,a,b) for(int i=(a);i>=(b);i--) #define N 510 int n,m; int read() { int su=0; char ch=getchar(); while(ch<'0'||ch>'9') ch=getchar(); while(ch<='9'&&ch>='0'){ su=su*10+ch-'0';ch=getchar(); } return su; } double out[N]; double a[N][N],b[N],x[N]; int lian[N][N]; void swap(double &xx,double &yy) { double temp; temp=xx; xx=yy; yy=temp; } void gauss(){ double t; int im,num=1; for(int k=1;k<n;k++,num++) { im=k; pos(i,k+1,n) if(fabs(a[i][k])>fabs(a[im][k])) im=i; if(im!=k){ pos(i,k,n) swap(a[num][i],a[im][i]); swap(b[num],b[im]); } if(!a[num][k]){ num--; continue; } pos(i,num+1,n){ if(!a[num][k]) continue; t=a[i][k]/a[num][k]; pos(j,k,n+1) a[i][j]-=t*a[k][j]; b[i]-=t*b[k]; } } pos2(i,n,1){ pos2(j,n,i+1) b[i]-=a[i][j]*x[j]; x[i]=b[i]/a[i][i]; } } struct qian{ int from,to; double e; }cun[N*N]; bool aaa(const qian &a,const qian &b){ return a.e<b.e; } double ans; int messi(){ freopen("walk.in","r",stdin); freopen("walk.out","w",stdout); n=read();m=read(); pos(i,1,m){ int x,y; x=read();y=read(); lian[x][y]=lian[y][x]=1; out[x]+=1.0;out[y]+=1.0; cun[i].from=x;cun[i].to=y; } out[n]=0.0; a[1][1]=-1.0; b[1]=-1.0; pos(i,2,n){ if(lian[i][1]==1&&out[i]){ a[1][i]=1.0/out[i]; } } pos(i,2,n){ a[i][i]=-1.0; pos(j,1,n){ if(j!=i&&lian[j][i]==1&&out[j]){ a[i][j]=1.0/out[j]; } } } gauss(); pos(i,1,m){ if(out[cun[i].from]!=0&&out[cun[i].to]!=0) cun[i].e=x[cun[i].from]/out[cun[i].from]+x[cun[i].to]/out[cun[i].to]; else{ if(out[cun[i].from]==0) cun[i].e=x[cun[i].to]/out[cun[i].to]; else cun[i].e=x[cun[i].from]/out[cun[i].from]; } } sort(cun+1,cun+m+1,aaa); pos(i,1,m){ ans+=cun[i].e*(double)(m-i+1); } printf("%0.3lf",ans); return 0; } int hallmeow=messi(); int main(){;}
[HNOI2013]游走 期望+高斯消元的更多相关文章
- [BZOJ3143][HNOI2013]游走(期望+高斯消元)
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3576 Solved: 1608[Submit][Status ...
- 【BZOJ】3143: [Hnoi2013]游走 期望+高斯消元
[题意]给定n个点m条边的无向连通图,每条路径的代价是其编号大小,每个点等概率往周围走,要求给所有边编号,使得从1到n的期望总分最小(求该总分).n<=500. [算法]期望+高斯消元 [题解] ...
- [luogu3232 HNOI2013] 游走 (高斯消元 期望)
传送门 题目描述 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等 ...
- 【BZOJ 3143】【Hnoi2013】游走 期望+高斯消元
如果纯模拟,就会死循环,而随着循环每个点的期望会逼近一个值,高斯消元就通过列方正组求出这个值. #include<cstdio> #include<cctype> #inclu ...
- 洛谷P3232 [HNOI2013]游走(高斯消元+期望)
传送门 所以说我讨厌数学……期望不会高斯消元也不会……好不容易抄好了高斯消元板子被精度卡成琪露诺了…… 首先,我们先算出走每一条边的期望次数,那么为了最小化期望,就让大的期望次数乘上小编号 边的期望次 ...
- BZOJ3143 [Hnoi2013]游走 【高斯消元】
题目 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编 ...
- bzoj3143游走——期望+高斯消元
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3143 只需算出每条边被经过的概率,将概率从小到大排序,从大到小编号,就可得到最小期望: 每条 ...
- bzoj 3143 [Hnoi2013]游走【高斯消元+dp】
参考:http://blog.csdn.net/vmurder/article/details/44542575 和2337有点像 设点u的经过期望(还是概率啊我也分不清,以下都分不清)为\( x[u ...
- 【BZOJ3143】游走(高斯消元,数学期望)
[BZOJ3143]游走(高斯消元,数学期望) 题面 BZOJ 题解 首先,概率不会直接算... 所以来一个逼近法算概率 这样就可以求出每一条边的概率 随着走的步数的增多,答案越接近 (我卡到\(50 ...
随机推荐
- 7.modifier插件的自定义和使用
1.在plugins下面创建一个文件 modifier.changeDate.php 编写: <?php function smarty_modifier_changeDate($utime,$ ...
- JavaScript学习笔记(散)——继承、构造函数super
构造函数中的super 今天看<JavaScript设计模式与开发实践>时,在书中看到一段代码出现super语句,第一次看到这个关键字,所以上网查了下它的作用,发现这个关键字是来自java ...
- TSC打印机使用教程终极版
最近公司做一个资产采集的项目,之前做过此类项目,不过没有整理资料,借这次机会写一下,做个记录. 本教程使用的打印机型号:TSC TTP-244 Plus 官方文档 一.TSC打印机安装 1.机 ...
- net 中web.config单一解决方法 (其他配置引入方式)
近期一个项目需要写许多的配置项,发现在单个web.config里面写的话会很乱也难于查找 所以搜了一下解决了,记录下来 一. webconfig提供了引入其他config的方式 <conne ...
- 高级Java程序员的技术进阶之路
据不完全统计,截至目前(2017.07)为止,中国Java程序员的数量已经超过了100万.而且,随着IT培训业的持续发展和大量的应届毕业生进入社会,Java程序员面临的竞争压力越来越大.那么,作为 ...
- 学会git玩转github,结尾有惊喜!有惊喜!有惊喜!
一.什么是Github Github是全球最大的社交编程及代码托管网站(https://github.com/). Github可以托管各种git库,并提供一个web界面(用户名.github.io/ ...
- Java 泛型在实际开发中的应用
java泛型是对Java语言的类型系统的一种扩展,泛型的本质就是将所操作的数据类型参数化.下面我会由浅入深地介绍Java的泛型. 一:泛型出现的背景 在java代码里,你会经常发现类似下边的代码: p ...
- Vue.js 基本功能了解
一.写在前面 隔了这么久才来出Vue的第二篇文章,真是堕落了,自己先惩罚下/(ㄒoㄒ)/~~ 回过头看自己第一篇相关文章<初试 Vue.js>(http://www.cnblogs.com ...
- 常用的一些js和css
/*给一组li里面写入12345.....*/ $("li").html(function(idx){ return idx+1; }) css限制文字字数: white-spac ...
- Java电器商场小系统--简单的java逻辑
//商场类public class Goods { int no; //编号 String name; //商品名称 double price; //商品价格 int number; //商品数量 / ...