Robots

\[Time Limit: 1000 ms \quad Memory Limit: 262144 kB
\]

题意

有一个机器人要从 \(1\) 点走到 \(n\) 点,每走一步都需要一天,并且这一步的代价是已经经过的天数。

思路

将问题拆成两个问题,\(dp1[i]\) 表示从 \(i\) 到 \(n\) 的天数期望,\(dp2[i]\) 表示从 \(i\) 到 \(n\) 的代价期望。

那么就很容易得到

\[dp1[u] = \frac{\sum_{u->v}(dp1[v]) + dp1[u]}{u.size()+1} + 1\\
dp1[u] = \frac{\sum_{u->v}(dp1[v]) + u.size()+1}{u.size()} \\
dp2[u] = \frac{\sum_{u->v}(dp2[v]) + dp2[u]}{u.size()+1} + dp1[u]\\
dp2[u] = \frac{\sum_{u->v}(dp2[v]) + (u.size()+1)*dp1[u]}{u.size()}
\]

/***************************************************************
> File Name : a.cpp
> Author : Jiaaaaaaaqi
> Created Time : Mon 09 Sep 2019 10:07:54 PM CST
***************************************************************/ #include <map>
#include <set>
#include <list>
#include <ctime>
#include <cmath>
#include <stack>
#include <queue>
#include <cfloat>
#include <string>
#include <vector>
#include <cstdio>
#include <bitset>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define lowbit(x) x & (-x)
#define mes(a, b) memset(a, b, sizeof a)
#define fi first
#define se second
#define pb push_back
#define pii pair<int, int> typedef unsigned long long int ull;
typedef long long int ll;
const int maxn = 1e5 + 10;
const int maxm = 1e5 + 10;
const ll mod = 1e9 + 7;
const ll INF = 1e18 + 100;
const int inf = 0x3f3f3f3f;
const double pi = acos(-1.0);
const double eps = 1e-8;
using namespace std; int n, m;
int cas, tol, T; vector<int> vv[maxn], rv[maxn];
int ind[maxn];
double dp1[maxn], dp2[maxn]; void solve() {
queue<int> q;
dp1[n] = dp2[n] = 0;
q.push(n);
while(!q.empty()) {
int u = q.front();
q.pop();
if(u != n) {
int sz = rv[u].size();
{
double ans = 0;
for(auto v : rv[u]) {
ans += dp1[v];
}
dp1[u] = 1.0*(ans+sz+1)/sz;
}
{
double ans = 0;
for(auto v : rv[u]) {
ans += dp2[v];
}
dp2[u] = 1.0*(ans+1.0*(sz+1)*dp1[u])/sz;
}
}
for(auto v : vv[u]) {
ind[v]--;
if(ind[v] == 0) q.push(v);
}
}
} int main() {
// freopen("in", "r", stdin);
scanf("%d", &T);
while(T--) {
scanf("%d%d", &n, &m);
for(int i=1; i<=n; i++) {
vv[i].clear();
rv[i].clear();
dp1[i] = dp2[i] = 0;
}
for(int i=1, x, y; i<=m; i++) {
scanf("%d%d", &x, &y);
rv[x].pb(y);
vv[y].pb(x);
ind[x]++;
}
solve();
printf("%.2f\n", dp2[1]);
}
return 0;
}

Robots 2019南京网络赛 (概率dp)的更多相关文章

  1. 2019 南京网络赛A

    南京网络赛自闭现场 https://nanti.jisuanke.com/t/41298 二维偏序经典题型 二维前缀和!!! #include<bits/stdc++.h> using n ...

  2. 2019南京网络赛 D Robots 期望dp

    题目传送门 题意:给出一幅有向无环图,保证只有1入度为0,n出度为0,求问一个机器人从1出发,每天等概率的走到相邻点或者留在原地,问到达n点的代价.每天的代价都不一样,就是天数(第x天走一步的代价就是 ...

  3. [2019南京网络赛D题]Robots

    题目链接 2019.9.2更新 第二天睡醒想了想发现好像搜一遍就可以过,赛时写的花里胡哨的还错了,太菜了QAQ #include<bits/stdc++.h> using namespac ...

  4. The Preliminary Contest for ICPC Asia Nanjing 2019/2019南京网络赛——题解

    (施工中……已更新DF) 比赛传送门:https://www.jisuanke.com/contest/3004 D. Robots(期望dp) 题意 给一个DAG,保证入度为$0$的点只有$1$,出 ...

  5. 2019南京网络赛E:K Sum

    Description: 定义函数 \[ f _n (k) = \sum _{l _1 = 1} ^n \sum _{l _2 = 1} ^n \cdots \sum _{l _k = 1} ^n \ ...

  6. 2019 南京网络赛 B super_log 【递归欧拉降幂】

    一.题目 super_log 二.分析 公式很好推出来,就是$$a^{a^{a^{a^{...}}}}$$一共是$b$个$a$. 对于上式,由于指数太大,需要降幂,这里需要用到扩展欧拉定理: 用这个定 ...

  7. 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 ...

  8. ICPC 2019 徐州网络赛

    ICPC 2019 徐州网络赛 比赛时间:2019.9.7 比赛链接:The Preliminary Contest for ICPC Asia Xuzhou 2019 赛后的经验总结 // 比赛完才 ...

  9. 2018ICPC南京网络赛

    2018ICPC南京网络赛 A. An Olympian Math Problem 题目描述:求\(\sum_{i=1}^{n} i\times i! \%n\) solution \[(n-1) \ ...

随机推荐

  1. 【性能优化】一文学会Java死锁和CPU100%问题的排查技巧

    原文链接: 00 本文简介 作为一名搞技术的程序猿或者是攻城狮,想必你应该是对下面这两个问题有所了解,说不定你在实际的工作或者面试就有遇到过: 第一个问题:Java死锁如何排查和解决? 第二个问题:服 ...

  2. 《即时消息技术剖析与实战》学习笔记1——IM系统的架构

    一.IM的应用场景 聊天.直播.在线客服.物联网等所有需要实时互动.高实时性的场景,都需要应用到 IM 技术.

  3. Typora使用手册

    块状元素: 标题: # 标题1 ## 标题2 ### 标题3 #### 标题4 ##### 标题5 ###### 标题6 使用快捷键: Ctrl + 1-6 块引用 使用符号 > 就可以进入引用 ...

  4. Java自学-接口与继承 重写

    Java 重写方法 子类可以继承父类的对象方法 在继承后,重复提供该方法,就叫做方法的重写 又叫覆盖 Override 步骤 1 : 父类Item 父类Item有一个方法,叫做effect packa ...

  5. IDEA控制台中文乱码问题

    Tomcat启动时乱码 在tomcat启动时,控制台中的中文为乱码 在idea安装路径的bin文件夹下,找到idea64.exe.vmoptions这个配置文件,添加如下代码 -Dfile.encod ...

  6. RocketMQ原理及源码解析

    RocketMQ原理深入: 一.定义: RocketMQ是一款分布式.队列模型的消息中间件,有以下部分组成: 1.NameServer: 一个几乎无状态的节点,可集群部署,节点之间无任何信息同步 2. ...

  7. MFC 文件保存对话框的设置的那些秘密

    搬家自CSDN 2015-5-14 CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR ...

  8. js实现数组去重(方式大汇总)

    方法一:循环判断当前元素与其后面所有元素对比是否相等,如果相等删除:(执行速度慢) var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5]; function remove ...

  9. 商业BISYNES英语BISYNES商务

    business from English bisynes Etymology From Middle English bisynes Hyphenation: business Noun busin ...

  10. byte[],File和InputStream的相互转换

    File.FileInputStream 转换为byte[] File file = new File("test.txt"); InputStream input = new F ...