题意

游乐园被描述成一张 n 个点,m 条边的无向图(无重边,无自环)。每个点代表一个娱乐项目,第 i 个娱乐项目需要耗费 ci 分钟的时间,会让小 y 和妹子的开心度分别增加 h1i ,h2i ,他们俩初始的开心度都是 0 。每条边代表一条路,第 i 条边连接编号为 xi , yi 的两个娱乐项目,从 xi 走到 yi 或者从 yi 走到 xi 耗费的时间都是 ti 分钟。小 y 和妹子预计在游乐园里玩 k 分钟。最开始的时候,小 y 和妹子会等概率的随机选择一个娱乐项目开始玩,每玩完一个项目后,小 y 和妹子会等概率的随机选择一个可以从当前项目直达的且来得及玩的项目作为下一个项目。如果玩完一个项目后周围没有可以直达的且来得及玩的项目,小 y 和妹子就会提前结束游玩。 请你分别计算小 y 和妹子在游玩结束后开心度的期望。

数据

输入第一行给出三个空格隔开的整数,分别表示 n,m,k
接下来的 n 行,每行三个空格隔开的整数,分别表示 ci,h1i,h2i
接下来的 m 行,每行三个空格隔开的整数,分别表示 xi,yi,ti

输出两个用空格隔开的实数,分表表示小 y 和妹子开心度的期望,精确到小数点后 5 位。

0<n≤100,1×60≤k≤8×60

10≤ci≤60,0<h1i,h2i≤100

0<ti≤15

输入

5 4 60
25 12 83
30 38 90
16 13 70
22 15 63
50 72 18
2 1 7
3 1 7
4 3 1
5 3 10

输出

39.20000 114.40000

题解:

  设定pair<double ,double> dp[i][j],表示到达并玩完第 i 个项目,两个人的期望

  转移就是向能走的点,走下去,期望总和/cnt,就是累积的ans

  看代码吧

#include<bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
#define ls i<<1
#define rs ls | 1
#define mid ((ll+rr)>>1)
#define pii pair<int,int>
#define MP make_pair
typedef long long LL;
const long long INF = 1e18+1LL;
const double pi = acos(-1.0);
const int N = 5e2+, M = 1e3+,inf = 2e9+; int n,m,K,t = ,c[N],h1[N],h2[N],head[N];
struct ss{
int to,next,value;
}e[N*N];
void add(int u,int v,int w) {
e[t].to = v;
e[t].next = head[u];
e[t].value = w;
head[u] = t++;
}
pair<double , double> dp[N][];
int vis[N][];
pair<double , double> dfs(int u,int k) {
if(vis[u][k])
return dp[u][k];
vis[u][k] = ;
pair<double , double>& ret = dp[u][k],now;
ret = MP(h1[u],h2[u]);
int cnt = ;
for(int i = head[u]; i; i = e[i].next) {
int to = e[i].to;
if(k >= c[to]+e[i].value)cnt++;
}
for(int i = head[u]; i; i = e[i].next) {
int to = e[i].to;
if(k < c[to] + e[i].value) continue;
now = dfs(to,k - c[to] - e[i].value);
ret.first += now.first*1.0/cnt;
ret.second += now.second*1.0/cnt;
}
//cout<<ret.first<<" "<<ret.second<<" "<<dp[u][k].first<<" "<<dp[u][k].second<<endl;
return ret;
}
int main() {
scanf("%d%d%d",&n,&m,&K);
for(int i = ; i <= n; ++i)
scanf("%d%d%d",&c[i],&h1[i],&h2[i]);
for(int i = ; i <= m; ++i) {
int x,y,t;
scanf("%d%d%d",&x,&y,&t);
add(x,y,t);add(y,x,t);
}
pair<double , double> ans = MP(,),now;
for(int i = ; i <= n; ++i) {
now = dfs(i,K - c[i]);
ans.first += now.first*1.0/n;
ans.second += now.second*1.0/n;
}
printf("%.5f %.5f\n",ans.first,ans.second);
return ;
}

LiberOJ#6178. 「美团 CodeM 初赛 Round B」景区路线规划 概率DP的更多相关文章

  1. #6164. 「美团 CodeM 初赛 Round A」数列互质-莫队

    #6164. 「美团 CodeM 初赛 Round A」数列互质 思路 : 对这个题来言,莫队可以 n*根号n 离线处理出各个数出现个的次数 ,同时可以得到每个次数出现的次数 , 但是还要处理有多少 ...

  2. loj #6177. 「美团 CodeM 初赛 Round B」送外卖2 状压dp floyd

    LINK:#6177.美团 送外卖2 一道比较传统的状压dp题目. 完成任务 需要知道自己在哪 已经完成的任务集合 自己已经接到的任务集合. 考虑这个dp记录什么 由于存在时间的限制 考虑记录最短时间 ...

  3. 【loj6177】「美团 CodeM 初赛 Round B」送外卖2 Floyd+状压dp

    题目描述 一张$n$个点$m$条边的有向图,通过每条边需要消耗时间,初始为$0$时刻,可以在某个点停留.有$q$个任务,每个任务要求在$l_i$或以后时刻到$s_i$接受任务,并在$r_i$或以前时刻 ...

  4. 「美团 CodeM 初赛 Round A」最长树链

    题目描述 Mr. Walker 最近在研究树,尤其是最长树链问题.现在树中的每个点都有一个值,他想在树中找出最长的链,使得这条链上对应点的值的最大公约数不等于1.请求出这条最长的树链的长度. 输入格式 ...

  5. Loj #6164. 「美团 CodeM 初赛 Round A」数列互质

    link : https://loj.ac/problem/6164 莫队傻题,直接容斥做. #include<bits/stdc++.h> #define maxn 100005 #de ...

  6. 【填坑】loj6159. 「美团 CodeM 初赛 Round A」最长树链

    水一水 枚举各个质数,把是这个数倍数的点留下,跑直径,没了 #include <bits/stdc++.h> using namespace std; int h,t,n,p,q,M,N; ...

  7. 「美团 CodeM 初赛 Round A」试题泛做

    最长树链 树形DP.我们发现gcd是多少其实并不重要,只要不是1就好了,此外只要有一个公共的质数就好了.计f[i][j]表示i子树内含有j因子的最长链是多少.因为一个数的不同的质因子个数是log级别的 ...

  8. loj6177 「美团 CodeM 初赛 Round B」送外卖2 最短路+状压dp

    题目传送门 https://loj.ac/problem/6177 题解 一直不知道允不允许这样的情况:取了第一的任务的货物后前往配送的时候,顺路取了第二个货物. 然后发现如果不可以这样的话,那么原题 ...

  9. [美团 CodeM 初赛 Round A]数列互质

    题目大意: 给出一个长度为n的数列a1,a2,a3,...,an,以及m组询问(li,ri,ki),求区间[li,ri]中有多少数在该区间中的出现次数与ki互质. 思路: 莫队. f[i]记录数字i出 ...

随机推荐

  1. Educational Codeforces Round 26

    Educational Codeforces Round 26 困到不行的场,等着中午显示器到了就可以美滋滋了 A. Text Volume time limit per test 1 second ...

  2. java面向抽象编程样例

    import java.util.*; abstract class Geometry{    public abstract double getArea();    }  class Pillar ...

  3. jquery滚动条插件slimScroll

    参数 width: 'auto', //可滚动区域宽度         height: '100%', //可滚动区域高度         size: '10px', //组件宽度         c ...

  4. iOS学习笔记15-序列化、偏好设置和归档

    一.本地持久化 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案: plist文件( ...

  5. hdu4035 Maze (树上dp求期望)

    dp求期望的题. 题意: 有n个房间,由n-1条隧道连通起来,实际上就形成了一棵树, 从结点1出发,开始走,在每个结点i都有3种可能: 1.被杀死,回到结点1处(概率为ki) 2.找到出口,走出迷宫 ...

  6. Spoj-TRNGL Make Triangle

    Make Triangle Chayanika loves Mathematics. She is learning a new chapter geometry. While reading the ...

  7. 蒲公英(bzoj 2724)

    Description Input 修正一下 l = (l_0 + x - 1) mod n + 1, r = (r_0 + x - 1) mod n + 1 Output Sample Input ...

  8. Permission denied: user=administrator, access=WRITE, inode="/":root:supergroup:drwxr-xr-x

    参考博文:http://blog.csdn.net/xiaoshunzi111/article/details/52062640 http://www.udpwork.com/item/7047.ht ...

  9. 非旋转Treap:用运行时间换调试时间的有效手段

    非旋转Treap:用运行时间换调试时间的有效手段   Hello大家好,我们今天来聊一聊非旋转Treap. 相信各位或多或少都做过些序列上的问题.如果水题我们考虑暴力:不强制在线我们可能用过莫队和待修 ...

  10. 利用javascript实现在圆周上匀速划动的动画效果

    先看下效果: