题目传送门

题意:给出一幅有向无环图,保证只有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的更多相关文章

  1. 2019 南京网络赛A

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

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

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

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

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

  4. Robots 2019南京网络赛 (概率dp)

    Robots \[ Time Limit: 1000 ms \quad Memory Limit: 262144 kB \] 题意 有一个机器人要从 \(1\) 点走到 \(n\) 点,每走一步都需要 ...

  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. 2018ICPC南京网络赛

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

  9. ICPC 2019 徐州网络赛

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

随机推荐

  1. 【总】IdentityServer4 32篇汇总

    随笔分类 - IdentityServer4 IdentityServer4 常见问题 - 用户拒绝授权后报错 摘要: 1.问题说明 在 IdentityServer4 Web 授权中,一般会有一个显 ...

  2. Python之列表转字典:setdefault、defaultdict、fromkeys

    setdefault result = {} data = [("p", 1), ("p", 2), ("p", 3), ("h& ...

  3. JQ实现仿淘宝条件筛选

    首先看下效果: Js代码: <script type="text/javascript"> $(".search_qxxx > ul > li & ...

  4. Spring Boot中普通类获取Spring容器中的Bean

    我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器进行管理,但是在实际当中,我们往往会碰到在一个普通的Java类中,自己动手n ...

  5. 两台群晖之间传输数据NFS

    如何在两台局域网的群晖之间传输数据,可以用NFS的方式来实现.摘抄如下,地址http://www.nasyun.com/thread-64638-1-1.html?reload=true 假设要把群晖 ...

  6. 浅谈HTTP与其工作流程

    一.什么是HTTP协议 HTTP协议(Hyper Text Transfer Protocol)翻译过来是超文本传输协议,也是一种restful风格的协议,在web开发和APP接口开发都很常用. HT ...

  7. 【Luogu】【关卡2-5】字符串处理(2017年10月)

    任务说明:这里的字符串处理还会变得更加的有意思,难度也更大.需要好好地思考一下.

  8. nodejs模块——fs模块 使用fs.read读文件

    使用fs.read读文件 fs.read() 先介绍fs.open. fs.open(path,flags,[mode],callback)方法用于打开文件,以便fs.read()读取. 参数说明: ...

  9. Java中static关键字的定义

    1.static存在的主要意义 static的主要意义是在于创建独立于具体对象的域变量或者方法.以致于即使没有创建对象,也能使用属性和调用方法! static关键字还有一个比较关键的作用就是 用来形成 ...

  10. 【leetcode】388. Longest Absolute File Path

    题目如下: Suppose we abstract our file system by a string in the following manner: The string "dir\ ...