最多能同时开几台

五个人、四台机器。每个人只会开其中几台,一台机器同时只能一个人用,一个人也只能占一台。 运行下面这段程序: #include <algorithm> #include <climits> #include <i

开始练习 →

先到先得能配上几对

五个人、四台机器。每个人只会开其中几台,一台机器同时只能一个人用,一个人也只能占一台。 这次按名单顺序来,每人挑第一台还空着的机器: #include <algorithm> #include <climits> #

开始练习 →

自己写:让前面的人挪个位

五个人、四台机器。每个人只会开其中几台,一台机器同时只能一个人用,一个人也只能占一台。 补全 aug 那两步。关键在「或者」后面半句——占着这台机器的人,能不能自己再挪到别处去。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

用最大流再算一遍匹配数

五个人、四台机器。每个人只会开其中几台,一台机器同时只能一个人用,一个人也只能占一台。 把匹配改写成一张管道网:总源 S 到每个人容量 1,人到他会开的机器容量 1,机器到总汇 T 容量 1。两种算法各算一次,输出两个数对账。 (本题用 g

开始练习 →

只对调两人贪心就对了

五个人、四台机器。每个人只会开其中几台,一台机器同时只能一个人用,一个人也只能占一台。 还是那个先到先得,只把名单里阿泰和南风的位置对调一下,其它一个字不改。两次各配出几对? (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

谁必须在谁前面用哪个

第 1 步:题目里的关键词 第 2 步:「先后」:用拓扑 第 3 步:「互相」:用强连通 第 4 步:「配对」:用匹配 第 5 步:「流量」:用最大流 先后 互相 配对 流量 拓扑 强连通 匹配 最大流 一堆任务,只知道两两之间的先后要求,

开始练习 →

互相到得了抱成团用哪个

一张有向图,要把「顺着箭头能互相走到」的点归成一组一组。该用的是【0】。

开始练习 →

四个问题各该用哪一个

四个问题依次是:一人一台、互相可达、最多过多少水、排出先后。按这个顺序输出各自该用的办法: #include <algorithm> #include <climits> #include <iostream&

开始练习 →

拓扑排序做了多少次减法

七个构建任务编号 0~6,(a, b) 表示 a 做完才能做 b。 数一数 kahn 里「入度减 1」这个动作在两张图上各做了多少次——左边是那张 DAG,右边是加了 5 → 3 的那张: #include <algorithm>

开始练习 →

聪明办法和笨办法差多少

七个构建任务编号 0~6,(a, b) 表示 a 做完才能做 b。 左边是拓扑排序数出来的减法次数。右边数一数笨办法要做多少次检查:把七个任务的全部排列都试一遍,每个排列逐条验七条依赖。 (本题用 g++ -std=c++17 -O0 编译

开始练习 →