我的代码有点长。。500多行吧。。大部分是用来调试的,细节比较多,调了一天一夜才ac。。。艹!
然后说下方法吧~
第一步是找出这个圈,怎么找呢?边双联通tarjan算法呗~这个简单
把这个圈拆开,于是形成了3-30颗树,因为题目说圈只有3-30个点
对于每个树进行树形dp,求出往上推的概率(dpx和dps,dps是dpx的总和)
然后在圈上dp,求出圈上每个点互相影响的概率,分顺时针(go)和逆时针(back)
再从圈出发往下推,求出推到每个节点的概率(dpy)
最后统计,有两种点会停止,一种是叶节点,还有一种是圈上度为2的节点,选出前5个相加就好了~o(∩_∩)o ~
#pragma comment(linker, "/STACK:102400000,102400000")
#include
#include
#include
#include
#include
#include
#include
#include