2019南京网络赛 D Robots 期望dp
题意:给出一幅有向无环图,保证只有1入度为0,n出度为0,求问一个机器人从1出发,每天等概率的走到相邻点或者留在原地,问到达n点的代价。每天的代价都不一样,就是天数(第x天走一步的代价就是x)。
思路:设出度每个点的选择情况为$cnt[i]$,即出度加1.
由于每天的代价和天数有关,所以应该要想到,可以先算出天数的期望。这样就可以得到每个点的代价,再算总的代价期望。
把一道题拆成两题,简单求解。
$dp[u]=dp[u]*\frac{1}{cnt[u]}+\frac{1}{cnt[u]}* \sum dp[v]+1$
移项可得 $dp[u]=\frac{1}{cnt[u]-1}\sum dp[v]+\frac{k}{k-1}$
然后求f
$f[u]=\frac{1}{cnt[u]}f[u]+\frac{1}{cnt[u]}*\sum f[v] +dp[u]$
$f[u]=\frac{1}{cnt[u]-1}\sum f[v]+\frac{k}{k-1}*dp[u]$
然后按照拓扑序的逆序来dp。
#pragma GCC optimize (2)
#pragma G++ optimize (2)
#pragma comment(linker, "/STACK:102400000,102400000")
#include<bits/stdc++.h>
#include<unordered_map>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define dep(i,b,a) for(int i=b;i>=a;--i)
#define clr(a,b) memset(a,b,sizeof(a))
#define pb push_back
#define pii pair<int,int >
using namespace std;
typedef long long ll;
ll rd()
{
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
const int maxn=;
const int inf=0x3f3f3f3f;
int n,m;
double dp[maxn],f[maxn];
double cnt[maxn];
int to[maxn],tot,dep[maxn];
vector<int >ve[maxn];
void topo(){
queue<int >q;
q.push();
tot=;
while(!q.empty()){
int u=q.front();
q.pop();
to[++tot]=u;
for(auto &v:ve[u]){
dep[v]--;
if(dep[v]==){
q.push(v);
}
}
}
}
int main(){
int T;
cin>>T;
while(T--){
scanf("%d%d",&n,&m);
rep(i,,n){
cnt[i]=;
dp[i]=;
f[i]=;
dep[i]=;
ve[i].clear();
}
rep(i,,m){
int u,v;
scanf("%d%d",&u,&v);
ve[u].push_back(v);
cnt[u]++;
dep[v]++;
}
topo();
for(int i=tot-;i>;--i){
int u=to[i];
double k=cnt[u];
dp[u]=k/(k-);
for(auto &v:ve[u]){
dp[u]+=(dp[v])/(k-);
}
}
for(int i=tot-;i>;--i){
int u=to[i];
double k=cnt[u];
f[u]=k/(k-)*dp[u];
for(auto &v:ve[u]){
f[u]+=(f[v])/(k-);
}
}
printf("%.2f\n",f[]);
}
}
2019南京网络赛 D Robots 期望dp的更多相关文章
- 2019 南京网络赛A
南京网络赛自闭现场 https://nanti.jisuanke.com/t/41298 二维偏序经典题型 二维前缀和!!! #include<bits/stdc++.h> using n ...
- [2019南京网络赛D题]Robots
题目链接 2019.9.2更新 第二天睡醒想了想发现好像搜一遍就可以过,赛时写的花里胡哨的还错了,太菜了QAQ #include<bits/stdc++.h> using namespac ...
- The Preliminary Contest for ICPC Asia Nanjing 2019/2019南京网络赛——题解
(施工中……已更新DF) 比赛传送门:https://www.jisuanke.com/contest/3004 D. Robots(期望dp) 题意 给一个DAG,保证入度为$0$的点只有$1$,出 ...
- Robots 2019南京网络赛 (概率dp)
Robots \[ Time Limit: 1000 ms \quad Memory Limit: 262144 kB \] 题意 有一个机器人要从 \(1\) 点走到 \(n\) 点,每走一步都需要 ...
- 2019南京网络赛E:K Sum
Description: 定义函数 \[ f _n (k) = \sum _{l _1 = 1} ^n \sum _{l _2 = 1} ^n \cdots \sum _{l _k = 1} ^n \ ...
- 2019 南京网络赛 B super_log 【递归欧拉降幂】
一.题目 super_log 二.分析 公式很好推出来,就是$$a^{a^{a^{a^{...}}}}$$一共是$b$个$a$. 对于上式,由于指数太大,需要降幂,这里需要用到扩展欧拉定理: 用这个定 ...
- HDU 4758 Walk Through Squares (2013南京网络赛1011题,AC自动机+DP)
Walk Through Squares Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Oth ...
- 2018ICPC南京网络赛
2018ICPC南京网络赛 A. An Olympian Math Problem 题目描述:求\(\sum_{i=1}^{n} i\times i! \%n\) solution \[(n-1) \ ...
- ICPC 2019 徐州网络赛
ICPC 2019 徐州网络赛 比赛时间:2019.9.7 比赛链接:The Preliminary Contest for ICPC Asia Xuzhou 2019 赛后的经验总结 // 比赛完才 ...
随机推荐
- iView的page 组件
//html <div class="pageNation"> <Page :total= totalPages :page-size= pageSize siz ...
- 小部分安卓手机 reload 等方法不执行
自己解析 url 来赋值刷新页面 方法如下:// location.href function updateUrl(url, key) { var key = (key || 't') + ...
- 浅谈HTTP与其工作流程
一.什么是HTTP协议 HTTP协议(Hyper Text Transfer Protocol)翻译过来是超文本传输协议,也是一种restful风格的协议,在web开发和APP接口开发都很常用. HT ...
- Web.xml配置详解之context-param(转)
转自:http://blog.csdn.net/liaoxiaohua1981/article/details/6759206 格式定义: <context-param> <para ...
- CF566E Restoring Map
题意:乱序给你树上的每一个节点与之相距<=2的节点集合(并不知道这具体是哪个节点). 还原整棵树. 标程: #include<bits/stdc++.h> #define P pai ...
- Python删除文件夹
import os os.rmdir('OS-Demo-2') os.removedirs('OS-Demo-3/sub-Dir-1') os.removedirs()会自动将上一级文件夹也删除,谨慎 ...
- list去重jdk1.8
List<Object> newList = ll.stream().distinct().collect(Collectors.toList()); //jdk8去重操作
- SSM框架整合依赖
<dependencies> <!--mybatis核心jar包--> <dependency> <groupId>org.mybatis</gr ...
- 使用Vue和djangoframwork完成登录页面构建 001
使用Vue和djangoframwork完成登录页面构建 001 环境的搭建 首先,我在我的电脑的F盘创建了一个文件夹 forNote,进入到这个文件夹中 F:\forNote> vue环境的搭 ...
- Shell基础(一):Shell基础应用、简单Shell脚本的设计、使用Shell变量、变量的扩展应用
一.Shell基础应用 目标: 本案例要求熟悉Linux Shell环境的特点,主要练习以下操作: 1> 切换用户的Shell环境 2> 练习命令历史.命令别名 3 ...