zoukankan      html  css  js  c++  java
  • UVA1104 芯片难题 Chips Challenge

    题目链接

    题意

    网格上放点,有些强制放,有些不能放,有些可以放可以不放。要求:

    1. (i) 行的点数 = 第 (i) 列的点数

    2. 每一行每一列的点数不超过总点数的 (k) 倍((k) 已知,且不大于1)

    (n <= 40)

    题解

    最小割好题。

    那么多行行列列肯定要将行列看作点,然后将各自看作边。首先第二个要求可以直接枚举,主要是第一个要求。

    根据常见套路,我们可以先把所有点都放上,然后再拿走一些点。这样,放上的点有两种选择:留着或被拿走。因此我们连两种边:如果 ((i, j)) 这个格子可以被拿走,那么 (r[i] -> c[j]),流1费1,表示“拿走”这条途径;对于 (i <= n)(r[i] -> c[i]),流 (tot * k) 费0, 表示一行和一列剩余数量必须相等(如果满流,则除了从 (i) 行和 (i) 列“拿走”的那些流以外,其它的流量全都从这条边流过,根据流量守恒,能够保证一行一列剩余数量相等)

  • 相关阅读:
    SPOJ SAMER08A
    SPOJ TRAFFICN
    CS Academy Set Subtraction
    CS Academy Bad Triplet
    CF Round 432 C. Five Dimensional Points
    CF Round 432 B. Arpa and an exam about geometry
    SPOJ INVCNT
    CS Academy Palindromic Tree
    身体训练
    简单瞎搞题
  • 原文地址:https://www.cnblogs.com/JiaZP/p/13353308.html
Copyright © 2011-2022 走看看