[补档][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编号 ...
随机推荐
- Mac: 易用设置
Mac是一个类unix系统,因此很多命令是类似于Linux的.例如其中的Terminal, shell等等.但是软件源鉴于国内的网络环境,是不方便配置的. 中文输入法快速切换. 在不同的语言中可以用组 ...
- Java常用类String的面试题汇总
比较两个字符串时使用"=="还是equals()方法? 当然是equals方法."=="测试的是两个对象的引用是否相同,而equals()比较的是两个字符串的值 ...
- fastJson将json字符串转换为map
public class JsonUtil { /** * 将json转化成map * @param jsonStr * @return */ public static Map<String, ...
- Object-C知识点 (三) 单例 蒙版 刷新 KVO底层
#pragma mark - 单例方法(完整的方法) 系统的单例方法名称 sharedApplication defaultManager standardUserDefaults currentDe ...
- 论MyBatis日志
Mybatis内置的日志工厂提供日志功能,具体的日志实现有以下几种工具: SLF4J Apache Commons Logging Log4j 2 Log4j JDK logging 具体选择哪个日志 ...
- 【JS】jquery通知插件toastr
toastr是一款非常棒的基于jquery库的非阻塞通知提示插件,toastr可设定四种通知模式:成功,出错,警告,提示,而提示窗口的位置,动画效果都可以通过能数来设置,在官方站可以通过勾选参数来生成 ...
- redis内存管理
Redis主要通过控制内存上线和回收策略来实现内存管理. 1. 设置内存上限 redis使用maxmemory参数限制最大可用内存.限制的目的主要有: 用户缓存场景,当超出内存上限maxmemory时 ...
- vsftpd配置虚拟用户
#安装vsftpd yum -y install vsftpd #创建本地ftp账户 groupadd ftpuser useradd -g ftpuser -s /sbin/nologin ftpu ...
- Data Volume 之 bind mount - 每天5分钟玩转 Docker 容器技术(39)
storage driver 和 data volume 是容器存放数据的两种方式,上一节我们学习了 storage driver,本节开始讨论 Data Volume. Data Volume 本质 ...
- vue实现对表格数据的增删改查
在管理员的一些后台页面里,个人中心里的数据列表里,都会有对这些数据进行增删改查的操作.比如在管理员后台的用户列表里,我们可以录入新用户的信息,也可以对既有的用户信息进行修改.在vue中,我们更应该专注 ...