![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
POJ
文章平均质量分 60
qq_38232157
这个作者很懒,什么都没留下…
展开
-
POJ 2453 An Easy Problem
简单的贪心对于n的二进制数,找到下标 x , x对应的二进制为1, x + 1 位对应的二进制为2,并且统计 0 ~ x 位之间有 cnt_1 个 1, 那么所求的答案就是 n 减去 这 cnt_1 个1 累加的值,再加上二进制值 2(11...1), 这里有 (cnt_1 - 1) 个 1......原创 2022-08-28 15:09:52 · 82 阅读 · 0 评论 -
POJ 1659 Frogs‘ Neighborhood (Havel 定理)
Havel 定理:序列的可图:给出一个 由非负整数组成的序列,如果是某个无向图的度序列,则称该序列是可图的。而 Havel 定理,就是判断序列的可图的方法。先按度数从大到小排序, 每次处理完度数一个点,删除之,剩下的排序。再处理度数最大的点。 如果出现不合理的情况,则该序列不可图。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using nam原创 2020-12-11 20:08:07 · 144 阅读 · 0 评论 -
POJ 2777 Count Color(线段树,区间修改)
线段树,区间修改网上老哥思路:线段树节点存储该区间内的颜色,单点区间肯定就是染成的颜色,大区间如果标记为-1则表示该区间由多种颜色的小区间组成,注意初始情况下木板均为同一种颜色,可以记为1。一共有最多30种颜色,所以用bool vis[30]数组标记,在每次查询的时候清空,查询到点或区间颜色相同时,对该颜色标记为true,最后统计1~T这T种颜色使用的个数即vis是true的情况本题要点:1、节点维护的信息:区间范围: [l, r]区间的颜色: color延迟标记: flag2、 套用线原创 2020-09-29 16:53:08 · 114 阅读 · 0 评论 -
POJ 2828 Buy Tickets(线段树)
线段树题意:第一行输入一个整数n,代表有n个人,以后的n行每行有两个数x,y代表把值为y的数放在第x个数之后(x==0代表值为y的数在第一个位置),要求按顺序输出这个序列本题要点:1、从后往前插入数字,比如第一个样例40 771 511 332 69最后一个数字 69, 插入到 下标3, 然后这个位置就是最终的位置。 倒数第二个数字 33, 插入到从头数 第 2 个空位,在这里,也就是下标2。倒数第3 个数字 51, 插入到 从头数 第 2 个空位, 此时下标 2, 3 都已经有数子了原创 2020-09-29 13:07:43 · 67 阅读 · 0 评论 -
POJ 2264 Advanced Fruits (最长公共子序列 LCS)
最长公共子序列 LCS题目意思:两个单词长度分别是n, m, 求出最长公共子序列长度 lcs, 然后将连个单词合并,合并后单词总长度等于 n + m - lcs ,使得两个单词所有的字母都按顺序出现,输出 合并后的单词。本题要点:1、套用 LCS 的模板,算出最长公共子序列。 然后,找出这个子序列在 s1 和 s2 中各个字母的下标。这个需要不断的回溯寻找, 找到 s1[i] == s2[j] 的字母,然后存到数组 d1 和 d2 。d1 数组表示 最长公共子序列 在 s1 的各个下标2、输原创 2020-09-19 17:44:03 · 128 阅读 · 0 评论 -
POJ 3048 Max Factor(素数,水题)
素数,水题题目意思:给出n个整数,要求数组这些整数中,拥有素因子最大的哪个整数。如果有多个,输出最早出现的那个。本题要点:1、n <= 20000, 先打素数表。然后对于每一个 数a[i], 求出其最大的素因子 max_fac[i].最后扫描数组 max_fac, 找出最大的那个即可。#include <cstdio>#include <cstring>#include <iostream>using namespace std;const in原创 2020-09-16 14:47:09 · 364 阅读 · 0 评论 -
POJ 1385 Lifting the Stone(计算几何,多边形重心)
计算几何,多边形重心本题要点:1、三角形重心,很容易,就是 3个点的x坐标,y坐标的平均值。2、多边形的重心,可以看做是,其分解成 n - 2 个三角形,每个三角形重心的加权平均值。3、 n 开到 1e5 就可以 AC了。#include <cstdio>#include <cstring>#include <iostream>#include <cmath>using namespace std;double eps = 1e-8;co原创 2020-09-13 18:28:14 · 93 阅读 · 0 评论 -
POJ 2425 A Chess Game(图游戏的sg函数,记忆化搜索,模板题)
图游戏的sg函数,记忆化搜索,模板题题目意思:给出n个坐标点(从 0 到 n - 1), 然后给出了每个坐标点可以到的 下一个坐标点。 现在两个人玩游戏,每次有 若干个棋子放到这些坐标点上,然后两人轮流把某个棋子走一步。如果某人无法移动任何棋子,该人就输了。对于每盘棋子,有m次询问, 每次询问给出了 若干个坐标,这些坐标放好了棋子。然后开始玩游戏。本题要点:1、 典型的 图游戏,有向无环图,使用sg函数求解。先求出所有的坐标点的sg 函数值,每次询问 若干个坐标点 {y1, y2, …, y原创 2020-09-08 12:52:09 · 133 阅读 · 0 评论 -
POJ 2728 Desert King(算法竞赛进阶指南,最小生成树,0/1分数规划)
算法竞赛进阶指南368页,最小生成树,0/1分数规划题目意思:n个点,每个点以平面坐标 (x, y) 表示, 其海拔高度是 z。 点与点之间的距离就是 (x1, y1) 与 (x2, y2) 的平面距离 (这里用数组 a[MaxN][MaxN] 来存)。点与点之间的高度差值的绝对值,叫做成本(这里用数组 b[MaxN][MaxN] 来存)。题目要求,找到一个图的生成树,使得这棵树 总的成本 sum{成本} / sum{距离} 最大。本题要点:1、 二分法,构造一个新的无向图, 边的权值 是 a原创 2020-09-05 22:22:42 · 119 阅读 · 0 评论 -
POJ 3615 Cow Hurdles(最短路径Floyd算法)
最短路径Floyd算法题目意思:n个点,m条有向边, 每条边都有一个长度。 从点x 到 点y,有一条路径的话,最长的那一段距离表示这条路径的花费。求任意两点之间的最小花费。本题要点:1、n <= 300, 可以用 floyd 算法,求任意两点之间的最小花费。原来的路径是累加起来的,现在只需要记录,这条路径的最大长度即可。2、 点 i 经过 点 k ,然后到达点 j. 那么,d[i][j] = min(d[i][j], max(d[i][k], d[k][j])),前提是, i 和 k原创 2020-09-04 16:16:20 · 108 阅读 · 0 评论 -
POJ 2255 Tree Recovery(算法竞赛入门经典,二叉树遍历,水题)
二叉树遍历,水题题目意思:给出先序和中序,求后序本题要点:1、 一个二叉树的先序和中序,确定一颗唯一的二叉树。2、写一个递归,由先序和中序建立一颗二叉树3、再写一个递归,后序遍历二叉树,打印每一节点。#include <cstdio>#include <cstring>#include <iostream>using namespace std;const int MaxN = 30;char pre[MaxN], mid[MaxN];stru原创 2020-09-02 12:16:23 · 1052 阅读 · 0 评论 -
POJ 3469 Dual Core CPU(最小割,建图)
最大流dinic算法,建图题目意思:双核计算机A,B,有n个模块,每个模块都要再CPU中运行,并且知道了每个模块在每个CPU上的运行时间,如果它们运行在同一个cpu,就可以忽略共享数据的花费,否则需要额外的费用,求完成所有任务的最小花费;本题要点:1、最大流量=最小割容量2、建图建图:让两个CPU分别为图的源点s和汇点t,已知每个模块与两个CPU的运行时间Ai,Bi,则对于每个模块,从s连向一条容量为Ai的边到这个模块,在从这个模块连一条容量为Bi的边到t;对于在不同模块运行的模块需要额外的原创 2020-08-25 19:26:28 · 146 阅读 · 0 评论 -
POJ 1422 Air Raid(DAG的最小路径覆盖,模板题)
DAG的最小路径覆盖,模板题题目意思:有n个点,m条边的有向无环图,每个点放一名士兵,然后士兵沿着图走,直到不能走为止, 每条只能由一名士兵走过,问最少需要多少士兵。本题要点:1、图很小,可以用邻接矩阵来存图。2、有向无环图,写成对应的二分图:当点x -> y, 看成左部节点x 指向右部节点 y + n, 左部节点的范围 1 ~ n, 右部节点范围 n + 1 ~ 2 * n3、 最小路径覆盖 = 点数 - 二分图最大匹配。#include <cstdio>#inclu原创 2020-08-20 22:51:50 · 87 阅读 · 0 评论 -
POJ 2771 Guardian of Decency(二分图最大独立集,裸题)
二分图最大独立集,裸题题目意思:有k 个学生,学生有男女,某些男女之间有些可能谈恋爱。老师要带一些学生出去旅游,要求不能有男女之间谈恋爱。本题要点:1、k <= 500, 用邻接矩阵来存图。左部节点: n个男学生右部节点: m个女学生。2、老师要带尽可能多的学生出去,就是取的点尽量多,显然是二分图最大独立集。二分图最大独立集 = 顶点个数 - 二分图最大匹配#include <cstdio>#include <cstring>#include <c原创 2020-08-20 22:42:14 · 117 阅读 · 0 评论 -
POJ 3041 Asteroids(二分图最小点覆盖, 转化)
二分图最小点覆盖题目意思:有 n * n 的矩阵, 有k个小行星, 有位美女开飞船,开一枪可以消灭一行或者一列的小行星。问,最少开多少枪, 可以消灭所以的小行星。本题要点:1、左部节点: n个横坐标右部节点:n个纵坐标n <= 500, 用邻接矩阵来存图2、 最小点覆盖数定义:就是对于一个图,选取最少数量的点S,使得对于所有的边,都至少有一端点是S中的点。该题目中,小行星的坐标 (x, y) 转化为 二分图 左部的点 x 连上 右部的点y的一条边。求出最小点覆盖数 的 s个点后,原创 2020-08-19 18:28:42 · 128 阅读 · 0 评论 -
POJ 3352 Road Construction(边双连通分量)
题目意思:给定一个无向图,图中没有重边,问添加几条边才能使得无向图变为 边双连通图本题要点:1、tarjan算法中,求割边时候,每个点都记录一个时间戳 dfn[i], 和回溯值 low[i]。有多少个不同的low 值,就有多少个边双连通分量。2、缩点:把low值相同的点,看做是一个缩点。用 deg 数组记录每一个缩点的入度。3、问题转化为:在缩点树上,添加多少条边,才能使得树变为一个边双连通图。至少添加边数 = (入度为1的缩点数 + 1) / 2#include <cstdio&原创 2020-08-18 16:14:20 · 129 阅读 · 0 评论 -
POJ 1962 Corporative Network(算法竞赛训练指南,带权并查集)
算法竞赛训练指南192页,带权并查集本题要点:1、命令处理:查询命令,E u, 先查询 u 的父节点, get(u), 然后 输出 u到根节点的距离 d[u].查询的时候,使用了路径压缩。同时累加 d[x] += d[fa[x]]2、I u v ,把 u的父节点设为v, 题目说明了当前的u点是没有父节点的。fa[x] = y, d[x] = abs(x - y) % 1000;#include <cstdio>#include <cstring>#include &原创 2020-08-12 14:04:44 · 106 阅读 · 0 评论 -
POJ 2356 Find a multiple(抽屉原理,前缀和)
抽屉原理题目意思:n个数任取若干个, 这些数的和是n的倍数, 输出其中的任意一种取法,输出元素的下标即可本题要点:1、抽屉原理有n+1件或n+1件以上的物品要放到n个抽屉中,那么至少有一个抽屉里有两个或两个以上物品。2、一个结论a1,a2,a3…am是正整数序列,至少存在整数k和r,1<=k<r<=m,使得ak+a(k+1)+…+a®是m的倍数。此题中,必定存在解。3、具体步骤用sum来记录数组a的前缀和,a) 如果某个 sum[i] % c == 0, 说明 sum原创 2020-08-08 20:04:40 · 69 阅读 · 0 评论 -
POJ 3981字符串替换(string, 水题)
字符串,水题本题要点:1、使用 string 的 find 和 replace 函数,每次读取一行,对该 string 操作,然后输出即可#include <cstdio>#include <cstring>#include <iostream>#include <string>using namespace std;int main(){ string str; int pos; while(getline(cin, str))原创 2020-08-08 18:10:20 · 208 阅读 · 0 评论 -
POJ 3370 Halloween treats(抽屉原理,前缀和)
抽屉原理题目意思:n个数任取若干个, 这些数的和是c的倍数, 输出其中的任意一种取法,输出元素的下标即可本题要点:1、抽屉原理有n+1件或n+1件以上的物品要放到n个抽屉中,那么至少有一个抽屉里有两个或两个以上物品。2、一个结论a1,a2,a3…am是正整数序列,至少存在整数k和r,1<=k<r<=m,使得ak+a(k+1)+…+a®是m的倍数。3、具体步骤用sum来记录数组a的前缀和,a) 如果某个 sum[i] % c == 0, 说明 sum[i] = a[1]原创 2020-08-08 16:42:27 · 119 阅读 · 0 评论 -
POJ 3280 Cheapest Palindrome(回文串, 区间DP)
回文串题目意思:给出一个字符串,然后给出n个字符,删除该字符和插入该字符的花费。问:删除或插入若干字符,使得该字符串变为回文串,所需要的代价花费最少。注意到,删除某个字符和插入某个字符是等价的,用数组 w 存放某个字符 删除后插入的较小值即可。本题要点:1、状态表示:dp[i][j] 表示s的子区间 [i, j] 变为回文串的最小花费2、转态转移:dp[i][j] = dp[i + 1][j - 1], s[i] == s[j]dp[i][j] = min(dp[i + 1][j] +原创 2020-08-03 11:59:02 · 99 阅读 · 0 评论 -
POJ 3134 Power Calculus(深搜,迭代加深,估价函数)
深搜,迭代加深,估价函数题目意思:经过若干次乘法和除法运算,由 x 得到 x^n 。问最少的运算次数。本题要点:1、迭代加深:用 递归深度 depth来控制 DFS 的深度。2、估价函数:最快的速度倍增,都无法达到n,则剪枝。#include <cstdio>#include <cstring>#include <iostream>#include <cstdlib>using namespace std;const int MaxN原创 2020-07-31 15:18:04 · 191 阅读 · 0 评论 -
POJ 2225 Asteroids!(三维广搜)
简单的三维 广搜题目意思:给定一个三维空间,有些点能走有些点不能走,每次只能上下,左右,前后六个方向走,给定起始坐标和终点坐标,求从起点到终点最短的路径。本题要点:1、图是按z,y,x给出的,所以在获取起点和终点时也是按z,y,x获取2、三维的 BFS, 有6个方向可以走(前后左右上下), 每次走一步,判断是否越界。3、vis[MaxN][MaxN][MaxN] 表示某点是否被访问过4、 结构体 node 的step,存放的是走的步数。5、 最后,用队列模拟 bfs即可。#include原创 2020-07-31 11:21:29 · 358 阅读 · 0 评论 -
POJ 2251 Dungeon Master(三维广搜)
简单的三维 广搜题目意思:三维空间中,给出 起点 S 和终点 E, 每个位置 是 ‘.’ 则可以通过, 位置是 '#'表示障碍物。要求 ,从起点 S到 终点E ,最少的走多少步。本题要点:1、三维的 BFS, 有6个方向可以走(前后左右上下), 每次走一步,判断是否越界。2、vis[MaxN][MaxN][MaxN] 表示某点是否被访问过3、 结构体 node 的step,存放的是走的步数。4、 最后,用队列模拟 bfs即可。#include <cstdio>#include原创 2020-07-31 11:16:16 · 97 阅读 · 0 评论 -
POJ 1606 Jugs(广搜,路径输出)
广搜,路径输出题目意思:给出两个壶的容量A和B, 一个目标水量C,对A、B可以有3种操作,求最少经过几步操作能够在某个壶中得到目标水量C。输入A、B和C,输入最少操作数和操作过程。 题目 和 poj 3414 一样。本题要点:1、状态表示:把A和B壶中水量作为状态,初始状态为<0,0>,每个操作都是状态变化的过程。因为有2个壶,所以总共有6种操作。vis[i][j] 表示第一个水杯装i, 第二个水杯装j 的状态是否出现过。2、用广搜,搜索可能出现的状态, 如果 存在某个状态,a水原创 2020-07-29 17:59:48 · 127 阅读 · 0 评论 -
POJ 3414 Pots(广搜,路径输出,经典)
广搜, 参考 https://blog.csdn.net/tigerisland45/article/details/52208174题目意思:给出两个壶的容量A和B, 一个目标水量C,对A、B可以有3种操作,求最少经过几步操作能够在某个壶中得到目标水量C。输入A、B和C,输入最少操作数和操作过程。本题要点:1、状态表示:把A和B壶中水量作为状态,初始状态为<0,0>,每个操作都是状态变化的过程。因为有2个壶,所以总共有6种操作。vis[i][j] 表示第一个水杯装i, 第二个水杯原创 2020-07-29 11:21:34 · 169 阅读 · 0 评论 -
POJ 3984 迷宫问题(深度优先搜索)
深度优先搜索本题要点:1、题目要求记录路径上的每一点的坐标,这里用 vector 来存。vector<pair<int, int> > ans 记录最优的方案,vector<pair<int, int> > tmp, 记录每一个可行的方案;2、dfs函数:递归边界: if(x == 4 && y == 4),将当前的坐标 (x, y) 放到tmp中往4个方向搜将当前的坐标 (x, y) 从tmp弹出来#include <原创 2020-07-28 22:21:16 · 119 阅读 · 0 评论 -
POJ 2029 Get Many Persimmon Trees(二维树状数组,模板题)
二维树状数组,模板题题目意思:国王所在的领地有WH个点,当中n个点处有树, 如今领地上最多同意圈(当然能够少于)大小为ST的矩形,问最多可圈中多少棵树?本题要点:1、 维护二维的树状数组, 在坐标 (x, y) 处有一颗树,那么 update函数,只需要 c[x][y]++ 即可。2、 统计每一个大小为 S * T 的矩形的时候,遍历所有的可能的 S * T 大小的矩形,for(int i = S; i <= w; ++i){ for(int j = T; j <= h; ++原创 2020-07-28 22:13:21 · 124 阅读 · 0 评论 -
POJ 1611 The Suspects(并查集,记录集合总数)
并查集本题要点:1、sum[i] 表示以i点为父节点的集合总数, 初始化的时候,每个点以自身为父节点,sum[i] = 1;在合并操作的时候,fa[fay] =fax;sum[fax] += sum[fay];#include <cstdio>#include <algorithm>#include <cstring>#include <iostream>using namespace std;const int MaxN = 30010原创 2020-07-28 16:57:05 · 89 阅读 · 0 评论 -
POJ 3494 Largest Submatrix of All 1’s(单调栈)
单调栈题目意思:有一个 0 和 1 数字构成的矩阵,要求全是数字1构成的子矩阵的最大面积。题目类似于 POJ 2559。本题要点:1、算法竞赛进阶指南,54页,单调栈算法,依次扫描每一行即可。2、用数组 h[i][j]记录每一行的某一列对应大高度。#include <cstdio>#include <cstring>#include <iostream>using namespace std;const int MaxN = 2010;int h[原创 2020-07-24 17:31:31 · 69 阅读 · 0 评论 -
POJ 2536 Gopher II(二分图最大匹配,裸题)
二分图匹配,裸题本题要点:1、二分图匹配:左部点是n个老鼠,右部点是m个鼠洞。当老鼠i和洞j之间的距离超过 s*v 的时候,i和j之间不存在边。用增光路算法算出最大匹配数 ans。 ans表示可以生存的老鼠, n - ans 表示被吃掉的老鼠。2、多 case#include <cstdio>#include <cstring>#include <iostream>#include <cmath>using namespace std;c原创 2020-07-22 15:21:15 · 101 阅读 · 0 评论 -
POJ 1811 Prime Test(pollard_rho 算法,裸题)
pollard_rho 算法的裸题题目意思:给出一个数n,如果n是素数,输出 Prime, 否则输出n的最小素因子本题要点:1、pollard_rho 算法求出 n的所有素因子。输出最小的即可。#include <cstdio>#include <ctime>#include <cstring>#include <cstdlib>#include <iostream>#include <cstdlib>#inclu原创 2020-07-16 17:22:35 · 136 阅读 · 1 评论 -
POJ 2429 GCD & LCM Inverse (挑战程序设计竞赛,Miller_Rabin算法, pollard_rho 算法)
挑战程序设计竞赛, 135页,素数测试, 大数因数分解题目意思:给出两个数 , gcd 和 lcm 分别表示 a和b的最大公约数和最小公倍数。求a和b. 如果有多组,输出 a + b 最小的一组。本题要点:1、Miller_Rabin算法:https://www.cnblogs.com/fzl194/p/9046117.html2、pollard_rho 算法:https://www.cnblogs.com/fzl194/p/9047710.html3、 对 b / a 做因式分解后,在有原创 2020-07-16 17:18:53 · 133 阅读 · 1 评论 -
POJ 2387 Til the Cows Come Home(最短路径,dijkstra算法, 裸题)
最短路径,dijkstra算法题目意思:有n个地点,编号从1 到 n, 题目给出m条边。要求从点n到点1 的最短路径。裸的 最短路径,dijkstra算法。本题要点:1、用邻接表来存图,双向边。2、dijkstra 算法,用堆来优化。#include <cstdio>#include <cstring>#include <iostream>#include <queue>using namespace std;const int Max原创 2020-07-14 23:32:51 · 170 阅读 · 0 评论 -
POJ 2142 The Balance(扩展欧几里得, 函数单调)
扩展欧几里得题目意思:给出重量为a和b的砝码,数量无限。要求用天平称出 重量c。 a, b, c都是整数, a != b.也就是求方程 a * x + b * y = c 的整数解。要求 |x| + |y| 值最小。如果 |x| + |y| 值相同,那么 |a * x| + |b * y| 值最小。本题要点:1、扩展欧几里得:求出 x0 和 y0 是方程 a * x + b * y = c一组解, 那么方程的通解是 x = x0 + b1 * k, y = y0 - a1 * k,其中,a1原创 2020-07-14 16:51:28 · 131 阅读 · 0 评论 -
POJ 3692 Kindergarten(挑战程序设计竞赛,二分图最大团)
挑战程序设计竞赛,283页,二分图最大团题目意思:幼儿园,所有女生相互之间认识,所有男生之间相互认识,有些女生和某些男生认识。现在,老师想挑选一些孩子玩游戏,这需要所有玩家彼此认识。您将帮助查找老师可以挑选的最大孩子数。本题要点:1、二分图的图:二分图的子图中,左部的任意一个节点和右部所有的节点都有连线,该子图称为二分图的 团。点数最多的团,称为二分图的最大团。2、二分图G 的补图 G1, G的最大团等于其补图G1的最大独立集。3、二分图的最大独立集 = 二分图的总点数 - 二分图的最大原创 2020-07-14 14:41:15 · 108 阅读 · 0 评论 -
POJ 1466 Girls and Boys (挑战程序设计竞赛,二分图最大独立集)
挑战程序设计竞赛,283页,二分图最大独立集二分图的最大独立集题目意思:在一群男女生之间存在浪漫关系,且只存在于男女之间,现给出存在关系的人的编号,但没给具体的男女性别,现在要求一个集合,在集合中任意两人都不存浪漫关系,输出集合中元素的个数.本题要点:1、定理:二分图的最大独立集 = 总点数 - 最大匹配数2、这里采用邻接表来存图。用增广路算法求出最大匹配数。二分图匹配,因为没有分左右每对匹配会出现两次。 最后算出来的 ans 要除以2;#include <cstdio>#原创 2020-07-14 12:22:23 · 101 阅读 · 0 评论 -
POJ 1469 COURSES(二分图最大匹配,裸题)
题目意思:p门课,n个学生,每一门课都有若干学生可以当代表。当然,每一个学生最多只能是一门课的代表。问:能否为每一门课都选出一个学生当代表。本题要点:1、二分图最大匹配:左部节点:课程的编号;右部节点:学生的编号;用邻接矩阵存放 图,使用增光路算法求出最大匹配数。#include <cstdio>#include <cstring>#include <iostream>using namespace std;const int MaxN = 310原创 2020-07-13 23:41:49 · 226 阅读 · 0 评论 -
POJ 1274 The Perfect Stall(挑战程序设计竞赛,二分图最大匹配,裸题)
题目意思:n头牛(编号1 ~ n),m个牛栏(编号 1 ~ m).每头牛只会在特定的牛栏产奶。当然,每一个牛栏只能装进一头牛。题目要求:怎样安排每头牛到特定的牛栏,使得牛产奶数最多。本题要点:1、二分图最大匹配:左部节点:牛的编号;右部节点:牛栏的编号;用邻接矩阵存放 图,使用增光路算法求出最大匹配数。#include <cstdio>#include <cstring>#include <iostream>using namespace std;原创 2020-07-13 23:13:57 · 139 阅读 · 0 评论 -
POJ 1325 Machine Schedule(算法竞赛进阶指南,二分图最小点覆盖)
算法竞赛进阶指南,434页,二分图最小点覆盖题目意思:有两台机器A和B,分别有n种和m种不同的模式,有k个工作,每个工作都可以在那两个机器的某种特定的模式下处理。如job0既可以在A机器的3好模式下处理,也可以在B机器的4号模式下处理。机器的工作模式改变只能通过人工来重启。通过改变工作的顺序,和分配每个工作给合适的机器可以减少重启机器的次数达到最小。任务就是计算那个最小的次数。初始时两台机器都运行在0号模式下本题要点:1、二分图最小点覆盖问题:每个作业 i 可以以机器A 的 a[i]模式运行原创 2020-07-13 21:55:35 · 119 阅读 · 1 评论