2022五一爆零记总结一


考炸了...第二题以一种及其离谱的方式读错题,代码写完才反应过来,只能说非常不幸勒...

重要的事说三遍!认真读题!认真读题!认真读题!

算法:网络流,拆点

题面如下:

题目描述
飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞机,这种飞机每架有两
个驾驶员,需一个正驾驶员和一个副驾驶员。由于种种原因,例如相互配合的问题,有些
驾驶员不能在同一架飞机上飞行,问如何搭配驾驶员才能使出航的飞机最多。
因为驾驶工作分工严格,两个正驾驶员或两个副驾驶员都不能同机飞行。
输入格式
第一行,两个整数 n 与 m,表示共有 n 个飞行员,其中有 m 名飞行员是正驾驶员。
下面有若干行,每行有 2 个数字 a、b。表示正驾驶员 a 和副驾驶员 b 可以同机飞行。
注:正驾驶员的编号在前,即正驾驶员的编号小于副驾驶员的编号。
输出格式
仅一行一个整数,表示最大起飞的飞机数。
样例
样例输入
10 5
1 7
2 6
2 10
3 7
4 8
5 9
样例输出
4
数据范围与提示
2<=n<=100

标准匈牙利算法,dalao用贪心做,待证


题目描述
某公司发现其研制的一个软件中有 n 个错误,随即为该软件发放了一批共 m 个补丁程
序。每一个补丁程序都有其特定的适用环境,某个补丁只有在软件中包含某些错误而同时
又不包含另一些错误时才可以使用。一个补丁在排除某些错误的同时,往往会加入另一些
错误。
换句话说,对于每一个补丁 i ,都有 2 个与之相应的错误集合 B1(i)和 B2(i),使得仅
当软件包含 B1(i)中的所有错误,而不包含 B2(i)中的任何错误时,才可以使用补丁 i。补丁
i 将修复软件中的某些错误 F1(i),而同时加入另一些错误 F2(i)。另外,每个补丁都耗费一
定的时间。
试设计一个算法,利用公司提供的 m 个补丁程序将原软件修复成一个没有错误的软
件,并使修复后的软件耗时最少。
输入格式
文件第 1 行有 2 个正整数 n 和 m ,n 表示错误总数,m 表示补丁总数。接下来 m 行
给出了 m 个补丁的信息。每行包括一个正整数,表示运行补丁程序 i 所需时间,以及 2 个
长度为 n 的字符串,中间用一个空格符隔开。
第 1 个字符串中,如果第 k 个字符 bk 为 +,则表示第 k 个错误属于 B1(i)。若为 -,
则表示第 k 个错误属于 B2(i) ,若为 0,则第 i 个错误既不属于 B1(i) 也不属于 B2(i) ,即软
件中是否包含第 k 个错误并不影响补丁 i 的可用性。
第 2 个字符串中,如果第 k 个字符 bk 为 -,则表示第 k 个错误属于 F1(i) ,若为 +,
则表示第 k 个错误属于 F2(i),若为 0,则第 i 个错误既不属于 F1(i) 也不属于 F2(i),即软
件中是否包含第 k 个错误不会因使用补丁 i 而改变。
输出格式
输出最小耗时,如果问题无解,则输出 0。
样例
样例输入
3 3
1 000 00-
1 00- 0-+
2 0-- -++
样例输出
8
数据范围与提示
1<=n<=20, 1<=m<=100

虽说是网络流24题,但是直接SPFA+状压,时间复杂度优秀


题目描述
给定正整数序列 x1~xn,以下递增子序列均为非严格递增。
1. 计算其最长递增子序列的长度 s 。
2. 计算从给定的序列中最多可取出多少个长度为 s 的递增子序列。
3. 如果允许在取出的序列中多次使用 x1 和 x2,则从给定序列中最多可取
出多少个长度为 的递增子序列。
输入格式
文件第 1 行有 1 个正整数 ,表示给定序列的长度。接下来的 1 行有 n 个正整数
x1~xn。
输出格式
第 1 行是最长递增子序列的长度 s。第 2 行是可取出的长度为 s 的递增子序列个数。
第 3 行是允许在取出的序列中多次使用 x1 和 xn 时可取出的长度为 的递增子序列个数。
样例
样例输入
4
3 6 2 5
样例输出
2
2
3
数据范围与提示
1<=n<=500

拆点网络流

拆点做法yyds

感觉可以适用于包含点个数的,也许还有其他用法?