家园 / 星际转移问题(洛谷P2754 分层图+最大流)

再一次感觉网络流太神奇了qwq

题目链接:[星际转移问题](P4009 汽车加油行驶问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn))

受到之前那道[汽车加油行驶问题](P4009 汽车加油行驶问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn))按汽油剩余量建图的启发,这题自然而然的就想到了按时间建图,但是怎么按时间建图又成了一个难点.

首先判断是否有解,地球与月亮联通时必定有解. 这一步可以用并查集来判断

DSU dsu(n + 5);
for (int i = 1; i <= m; ++ i) {
   
    for (auto &x : s[i]) cin >> x, ++ x;
    for (int j = 0; j < k - 1; ++ j) dsu.merge(s[i][j], s[i][j + 1]);
}
if (dsu.find(0) != dsu.find(1)) {
   
    cout << 0 << '\n';
    return 0;
}

由于数据范围很小,我们可以枚举时间,然后跑最大流看是否等于总人数 K K K

本题的所有角色编号

  • 源点: S S S

  • 汇点: T T T

  • 地球: 1 1 1

  • 月球: 0 0 0

  • 空间站: 0 ∽ n + 1 0 \backsim n+1 0n+1 ( ( (默认地球和月球也是空间站 ) ) )

  • 太空船: n + 2 ∽ n + 1 + m n+2 \backsim n+1+m n+2n+1+m

所以除开源汇点外,节点个数 c n t cnt cnt n + m + 2 n+m+2 n+m+2,对于时间 T T T对应的节点编号为 i n d e x + T × ( n + m + 2 ) index+T \times (n+m+2)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值