二分图
青烟绕指柔!
我不怕千万人阻挡,只怕自己投降。
展开
-
[TJOI2018]智力竞赛
题目链接:[TJOI2018]智力竞赛首先我们可以想到二分。然后对于需要覆盖的点,看是否被小于等于 n+1 条链全部覆盖,先跑一个传递闭包,然后把小于等于二分的点拿出来建图即可。然后就是一个最小链覆盖了。如果不跑传递闭包,单独对 x+m -> x的边,我们无法处理 3 -> 5 -> 4 ,但是我们二分的答案为4的情况。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc原创 2020-10-15 14:48:57 · 224 阅读 · 0 评论 -
J.I
题目链接:J.I因为题目保证不成环,那么说明肯定是一个二分图。那我们二分图染色之后,答案就是 n1*n2 - m ,所以我们要让二分图两边的点尽量接近,直接dp即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const int N=2e5+10;int n,m,vis[N],原创 2020-07-23 08:56:29 · 315 阅读 · 0 评论 -
Muddy Fields G
题目链接:Muddy Fields G对每个联通块分别考虑即可。然后每个点肯定是竖着的或者横着的,跑一个最小点覆盖即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const int N=5010,M=1e6+10;int n,m,g1[55][55],g2[55][55],c原创 2020-07-14 22:56:44 · 204 阅读 · 0 评论 -
唐纳德和他的数学老师
题目链接:唐纳德和他的数学老师显然我们从1->n开始枚举,只要有一次最大匹配不为i,那么就直接退出了。因为这个二分图的两边点数差异很大,所以最大流会TLE。然后二分图的时候我们需要利用时间戳,不能每次清空vis数组。复杂度:O(n*m),显然素因子个数是log级别的,所以复杂度为:O (n * n * log(1e6))AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h&g原创 2020-06-15 13:24:35 · 206 阅读 · 0 评论 -
Codeforces - 741C
题目链接:Codeforces - 741C如果能想到一定有解,那么就简单很多了。很容易会想到用2-SAT去做,但是是做不了的。我们对情侣连边,然后2i-1和2i连边,那么我们可以发现是满足条件的,并且肯定是二分图。所以直接染色即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;原创 2020-06-13 10:26:46 · 300 阅读 · 0 评论 -
Easter Eggs
题目链接:Easter Eggs显然可以二分。然后怎么check呢?显然我们把距离小于mid的点连起来,那么就相当于找一个最大独立集,然后最大独立集的个数要大于等于n。然后因为连边的只是蓝色和红色之间,所以这是一个二分图,之间匈牙利即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std原创 2020-06-03 12:02:24 · 922 阅读 · 0 评论 -
Guardian of Decency
题目链接:Guardian of Decency把不满足的连边,就相当于找最大独立集了。是一个NP问题,但是我们可以注意到,男女一定不满足,所以这是一个二分图。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusi...原创 2020-04-27 13:16:46 · 509 阅读 · 0 评论 -
Codeforces - Airports
题目链接:Codeforces - Airports如果把任务拿出来建点,那么我们可以发现,其实就是一个最小路径覆盖。注意一下细节即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace...原创 2020-03-05 10:28:08 · 236 阅读 · 0 评论 -
Codeforces - Cover it!
题目链接:Codeforces - Cover it!感觉这道题应该是属于随便做都能AC的那种。我们直接对每个点黑白染色,取一个数量少的点输出即可。奇环是没有影响的。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long long...原创 2020-02-23 13:25:55 · 234 阅读 · 0 评论 -
二分图总结
最小顶点覆盖:在二分图中寻找一个尽量小的点集,使图中每一条边至少有一个点在该点集中。最小顶点覆盖 == 最大匹配。 反证法证明:假设当前存在一条两个端点都不在最小顶点覆盖点集中,那么这么光芒四射的边定可以增大最大匹配边集,与最大匹配矛盾,所以得证。最小路径覆盖:在二分图中寻找一个尽量小的边集,使图中每一个点都是该边集中某条边的端点。最小路径覆盖 == 顶点数 - 最大匹配。 ...原创 2019-07-14 19:19:03 · 338 阅读 · 0 评论 -
Codeforces - G. Allowed Letters
题目链接:Codeforces - G. Allowed Letters霍尔定理+贪心。显然最小字典序是可以贪心的,但是我们贪心必须保证后面是有解的,怎么保证呢?存在最大匹配,但是每次都跑最大匹配太慢了,又因为左边字符只有6个,于是我们可以用霍尔定理快速判断。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include...原创 2020-01-22 12:50:55 · 303 阅读 · 0 评论 -
小Z的游戏分队
题目描述小Z受不了寂寞,准备举办一次DOTA比赛,为了能让ACM班全部都参加比赛,他还特制了一张DOTA地图能够支持任意多人打任意多人。现在问题来了,怎么把这么多人分成两队?小Z的想法是,每个人报上自己愿意同队的同学,接着小Z会按如下要求将所有人分为两队:对任意同学甲,和同学甲同队的人,必须都是同学甲愿意同队的同学。小Z希望两队的人数差尽量小,如果这种分组不存在,那么输出No soluti...原创 2020-01-10 18:41:45 · 454 阅读 · 0 评论 -
[SHOI2001]小狗散步
题目背景Grant喜欢带着他的小狗Pandog散步。Grant以一定的速度沿着固定路线走,该路线可能自交。Pandog喜欢游览沿途的景点,不过会在给定的N个点和主人相遇。小狗和主人同时从(X1,Y1)点出发,并同时在(Xn,Yn)点汇合。小狗的速度最快是Grant的两倍。当主人从一个点以直线走向另一个点时,Pandog跑向一个它感兴趣的景点。Pandog每次与主人相遇之前最多只去一个景点。题目...原创 2020-01-08 17:42:09 · 356 阅读 · 1 评论 -
机器任务
有两台机器 A,B 以及 K 个任务。机器 A 有 N 种不同的模式(模式0~N-1),机器 B 有 M 种不同的模式(模式0~M-1)。两台机器最开始都处于模式0。每个任务既可以在A上执行,也可以在B上执行。对于每个任务 i,给定两个整数 a[i] 和 b[i],表示如果该任务在 A 上执行,需要设置模式为 a[i],如果在 B 上执行,需要模式为 b[i]。任务可以以任意顺序被执行,...原创 2019-12-17 11:45:55 · 225 阅读 · 0 评论 -
最小路径覆盖问题
题目求有向无环图的最小路径覆盖(可以从任意一个点开始)题目链接:洛谷P 2764二分图性质:最小路径覆盖 == 顶点数 - 最大匹配数所以此题我们可以转化为求最大匹配来做,但是麻烦的是输出路径。考虑建图:我们可以把点拆成两个点,分别为入点和出点,让超级源点S连向每个点的入点,让每个点的出点连向超级汇点T,然后如果u能到达v,那么就让u的入点连向v的出点即可。(建图完成)然后跑一...原创 2019-08-06 23:48:05 · 256 阅读 · 0 评论 -
最小路径覆盖详解
定义:通俗点讲,就是在一个有向图中,找出最少的路径,使得这些路径经过了所有的点。而最小路径覆盖又分为:最小不相交路径覆盖 和 最小可相交路径覆盖。最小不相交路径覆盖 : 就是我们找到的每条路径不能相交,就是每条路径不能有同一个点。最小可相交路径覆盖 : 这个与上面相对应,就是可以相交。注意:每个点被自己覆盖,路径长度为0求解最小不相交路径覆盖: 我们把每个点都拆成两个点,分为入点和出点...原创 2019-08-07 11:14:12 · 2738 阅读 · 0 评论 -
HDU - 3081
Marriage Match IITime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5882 Accepted Submission(s): 1872Problem DescriptionPresumably, you all ...原创 2019-08-16 10:54:59 · 234 阅读 · 0 评论 -
zzq的离散数学教室2
题目描述离散数学中有种名叫“偏序集”的东西。在这个题目中,集合中有n个元素,编号从1到n。它们之间共有m对偏序关系(1<=m<=2n),每一对偏序关系的表示形式为以空格分开的两个编号:x y。含义是x和y之间有关系≤。(这里的≤不是传统意义上的小于等于,可以理解为从y到x的一条有向边),记做:x≤y。同时这些关系也具有传递性,例如,如果x≤y并且y≤z,那么可以得到x≤z。数据保证...原创 2019-08-21 20:09:53 · 418 阅读 · 0 评论 -
[国家集训队]部落战争
题目描述lanzerb的部落在A国的上部,他们不满天寒地冻的环境,于是准备向A国的下部征战来获得更大的领土。A国是一个M*N的矩阵,其中某些地方是城镇,某些地方是高山深涧无人居住。lanzerb把自己的部落分成若干支军队,他们约定:每支军队可以从任意一个城镇出发,并只能从上往向下征战,不能回头。途中只能经过城镇,不能经过高山深涧。如果某个城镇被某支军队到过,则其他军队不能再去那个城镇了。...原创 2019-10-10 13:24:37 · 252 阅读 · 0 评论 -
HDU - 2119 Matrix
MatrixTime Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3788 Accepted Submission(s): 1803Problem DescriptionGive you a matrix(only contains...原创 2019-10-10 22:16:52 · 230 阅读 · 0 评论 -
[SCOI2010]连续攻击游戏
题目描述lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示。当他使用某种装备时,他只能使用该装备的某一个属性。并且每种装备最多只能使用一次。游戏进行到最后,lxhgww遇到了终极boss,这个终极boss很奇怪,攻击他的装备所使用的属性值必须从1开始连续递增地攻击,才能对boss产生伤害。也就是说一开始的时候,lxhgw...原创 2019-08-06 10:40:54 · 438 阅读 · 0 评论