lightoj 图论题(二分图与网络流)总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37943488/article/details/82499915

LightOJ 1149

题意:给两个集合,要求去掉一些元素,使得剩下的两个集合的元素尽量的少,且第二个集合的数都不能整除第一个集合的数

最小点覆盖=最大匹配数,所以对于那些第二个集合能整除第一个集合的数,就连一条边,最后跑一次匈牙利,就能知道要去掉多少个数了

LightOJ 1150

题意:给一个地图,有一些怪兽和人,每个怪兽都要去吓一个人,怪兽只能走上下左右四个方向,一个怪兽只会吓一个人,吓一个人要两分钟,走一个格子要1分钟,问最后吓完所有人要多久

首先要bfs找出一个怪兽与其它所有人类的关系,bfs计算它能到达的那个人所需要的时间,然后连一条边,因为每个怪兽只能吓一个人,所以可以用二分图匹配来做,对于时间,用二分来判断时间,因为这些怪兽是同时进行的,所以最晚做完事的怪兽决定了整个时间。

题解

LightOJ 1152

题意:一个n*m的图,*表示金块,要求用1*2或2*1的骨牌覆盖所有金块,骨牌间可以相互覆盖,问最少要多少骨牌才能将所有的金块覆盖

二分图里的奇偶建图,对于这类问题,可以想到对于一个点,它的上下左右跟它自己都可以被1*2或2*1的骨牌覆盖,观察他们的坐标可以发现,只有一个点的x,y坐标加起来与另一个点的x,y坐标加起来的奇偶性不同才能覆盖,将他们连上一条边,跑一遍匈牙利。但是这道题还有一些游离点的地方,它们也需要一个骨牌。我们将金块总数算出来,然后减去匹配数,这就是游离点的个数,他们需要一个骨牌,对于那些已经匹配的,我们将它除以2,因为对于一个匹配多算了一遍,这就是匹配好的骨牌个数

题解

LightOJ 1429

题意:有N个地方,每个地方有一个人,要派出忍者刺杀他们,每个忍者可以走重复的城市,问最少派出多少个忍者(有向图)

此处的是可相交路径,这个地方要注意,可相交路径最小覆盖与不可相交路径最小覆盖的处理方法是不同的,对于可相交路径,我们需要求闭包然后重新连边,在这道题里面还有环,所以用一个tarjan将环处理,最后就是匹配了

题解

LightOJ 1171

题意:一个n*m的棋盘上放棋子。然后有k个地方是不能放的。放了一个棋子后,它周围八个地方就不能放了,问最多放多少个棋子。

这道题也是奇偶建图,只不过它连边的不再是上下左右,而是更远的上下左右,但是本质都是一样的,首先对于每个能用的点进行标号,将坐标和为奇数的点放在左部,为偶数的点放在右部,将会冲突的地方连一条边,跑一遍匈牙利,点的总数减去不能用的减去最大匹配数就是答案了

题解

LightOJ 1356

题意:给你一个集合,问最大的子集满足集合内任意两个数都不能通过乘素数得到

最大独立集定义:选出一些顶点使得这些顶点两两不相邻,则这些点构成的集合称为独立集。找出一个包含顶点数最多的独立集称为最大独立集。最大独立集=点数-最大匹配

题解

LightOJ 1153

题意:无向图最大流

题解 

LightOJ 1154

题意:有一群企鹅,n块冰,给出每个企鹅的最大跳跃距离,再给出冰的坐标和上面存在的企鹅个数和允许跳跃的次数,问有哪些冰是可以将所有的企鹅汇聚起来的

对于每一块冰进行拆点,容量为允许跳跃次数,源点向这块冰连一条边,容量为这个冰的企鹅个数。然后n^2枚举冰与冰,如果它们之间的距离小于最大跳跃距离,就连一条边,容量为无穷,因为冰与冰之间不限制跳跃次数,单块冰才限制跳跃次数。最后跑最大流即可,跑完最大流,枚举每一个点,因为每一个点都可以是汇点,只要这一个点满流了,就说明企鹅可以在这块冰聚集

LightOJ 1155

题意:典型的多源多汇问题

题解

LightOJ 1156

题意:有n个石头,河道的距离为d。河道上有B石头和S石头,B石头可以无限跳,S石头只能跳一次。一只青蛙要从最左边跳到最右边又要跳回去,问跳的最大距离

二分最大距离建图,设0为下界,d为上界,二分这个距离,对于每个石头拆点,如果是S石头,连一条容量为1的边,否则连一条容量为2的边,如果这个石头到对岸的距离小于等于这个最大距离,将这个石头连到汇点,同理可以处理连到源点的石头,如果岸的距离小于等于最大距离,那么源点到汇点也要连边,然后是石头之间连边,跑最大流即可

LightOJ 1167

题意:山顶和山下分别有两个部落,编号为0和n+1,它们之间有很多隧道,有n个中转站(就是两条隧道相接的地方),每条隧道有一个危险程度,一条路径的危险程度是路径中所有隧道危险程度的最大值,几条路径的危险程度是危险程度最大的路径的危险程度,现在从山顶向山下选k条路径,求最大危险程度。选择隧道时只能从较高的中转站往较低的中转站走,且两条路径不能经过同一个中转站。

对每一个地方进行拆点,中转站只能走一次,就连一条容量为1的边。二分枚举这个危险值,小于危险值的就连边,然后跑最大流,这时候最大流等于路的个数

猜你喜欢

转载自blog.csdn.net/qq_37943488/article/details/82499915