P7418 [USACO21FEB] Counting Graphs P 题解

P7418 [USACO21FEB] Counting Graphs P

题目大意:

给定一张图,对于另一张合法的图,当且仅当两张图 ( u , v ) (u, v) (u,v) 之间所有的路径长度相同。统计所有合法的图的数量。注意路径不一定是简单路径。

看到路径不一定是简单路径基本上就可以猜到做法了。因为是复杂路径一条边重复走是增加 2 2 2 的贡献,所以只要任意两点之间最短奇偶路径相同即可。我们可以找出这样的路径。我们任意找一个起点,之后可以得到 n n n 个数对。我们为了方便钦定 ( x , y ) , x < y (x, y), x < y (x,y),x<y

我们考虑一条边可以产生贡献而且是合法的是什么情况。对于一个 ( x , y ) (x, y) (x,y) 来说之前的点对 $ + 1$ 必须保证 x 1 + 1 − x ≡ 0 ( m o d 2 ) , y x_1 +1 - x\equiv 0\pmod 2, y x1+1x0(mod2),y 同理。然后我们不一定每一个点都要考虑,直接继承就好了。

所以总共有 3 3 3 种点。

  • (x - 1, y - 1) A A A 类边,点个数为 a a a
  • (x - 1, y + 1) B B B 类边,点个数为 b b b
  • (x + 1, y - 1) C C C 类边,点个数为 c c c
  • (x, y)是当前的点对,点个数为 d d d

我们发现如果链接了 A A A 类边直接就合法了。如果不链接 A A A 类边就必须同时连接 B , C B, C B,C 类边。

我们发现对于当前点,然后对于其左下方的点本质上就是一个子状态。那么我们 d p dp dp 的顺序就是让 x + y x + y x+y 小的先 d p dp dp。不然就是让 x x x 从小到大 d p dp dp

因为需要考虑链接了几个 B B B 类边。然后我们不可能对于一个点同时计算 B , C B, C B,C 类边。这样就重复计算了。所以不妨钦定只计算 B B B 类边。同时计算上一个状态的 C C C 类边。

f ( a , b , x ) f(a, b, x) f(a,b,x) 表示当前的点对是 ( a , b ) (a, b) (a,b) 然后恰好还有 x x x 个点需要链接 C C C 类边。

之后我们发现进行 d p dp dp 的时候需要考虑 B B B 类边。我们预先设状态

g ( a , b , x ) g(a, b, x) g(a,b,x) 表示对于点对 ( x , y ) (x, y) (x,y) 恰好有 x x x 个点不链接 B B B 类边。

我们转移的时候考虑上面一个状态链接了几条边。
g ( a , b , x ) = ( d x ) ∑ y = 0 d f ( a − 1 , b + 1 , y ) × F ( b , y , d − x ) g(a, b, x) = \binom{d}{x}\sum_{y = 0} ^ {d} f(a - 1, b + 1, y) \times F(b, y, d - x) g(a,b,x)=(xd)y=0d

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值