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) 列“拿走”的那些流以外,其它的流量全都从这条边流过,根据流量守恒,能够保证一行一列剩余数量相等)

  • 相关阅读:
    cnpm 安装和 command not found
    C#-弄懂泛型和协变、逆变
    2019年阅读
    ES5和ES6数组方法
    ASP.NET MVC中的捆绑和压缩技术
    markdown解析与着色
    Oauth2.0
    同源策略和跨域的解决方案
    windows常用命令
    Java 9 在win10环境搭建
  • 原文地址:https://www.cnblogs.com/JiaZP/p/13353308.html
Copyright © 2011-2022 走看看