随笔分类 - ACM-二分图匹配
摘要:题意:有2^N块奶酪,编号为00...0到11..1。有一台机器,有N个开关。每个开关可以置0或置1,或者置*。但是规定N个开关中最多只能有一个开关置*。一旦打开机器的开关,机器将根据N个开关的状态对状态对应的编号的奶酪进行消毒。例如:111 --> 对编号111的奶酪进行消毒。说明:*代表0或1。...
阅读全文
摘要:题意:出租车公司有M个订单。订单格式: hh:mm a b c d 含义:在hh:mm这个时刻客人将从(a,b)这个位置出发,他(她)要去(c,d)这个位置。规定1:从(a,b)到(c,d)所花的时间为:abs(a-c)+abs(b-d)。规定2:一辆出租车如果要接单,必须在客人出发前1分钟...
阅读全文
摘要:题意:有G个女孩,B个男孩。女孩彼此互相认识,男孩也彼此互相认识。有M对男孩和女孩是认识的。分别是(g1,b1),.....(gm,bm)。现在老师要在这G+B个小孩中挑出一些人,条件是这些人都互相认识。问最多可以挑出多少人。思路:女孩之间互相认识,男孩之间互相认识,所以我们可以将连边定义为:不认识...
阅读全文
摘要:题意:有一个城镇,它的所有街道都是单行(即有向)的,并且每条街道都是和两个路口相连。同时已知街道不会形成回路。可以在任意一个路口放置一个伞兵,这个伞兵会顺着街道走,依次经过若干个路口。问最少需要投放几个伞兵,使得每个路口都被伞兵拜访过。并且要满足每个路口只能被一个伞兵拜访过。思路:裸DAG图的最小路...
阅读全文
摘要:题意:M*N的棋盘,规定其中有K个格子不能放任何东西。(即不能被覆盖)每一张牌的形状都是1*2,问这个棋盘能否被牌完全覆盖(K个格子除外)思路:M、N很小,把每一个可以覆盖的格子都离散成一个个点,然后二分图最大匹配。一个重要的问题**:可不可能存在建完的图是这样的情况:1-2,2-3,3-4,4-5...
阅读全文
摘要:题意:N只地鼠M个洞,每只地鼠、每个洞都有一个坐标。每只地鼠速度一样,对于每只地鼠而言,如果它跑到某一个洞的所花的时间小于等于S,它才不会被老鹰吃掉。规定每个洞最多只能藏一只地鼠。问最少有多少只地鼠会命丧鹰口。思路:直接建图。二分图最大匹配。代码:char st[105];char Range[25...
阅读全文
摘要:题意:有五种衣服尺码:S,M,L,X,TN个人,每个人都有一个可以穿的衣服尺码的范围,例:SX,意思是可以穿S,M,L,X的衣服。给出五种尺码的衣服各有多少件。如果可以满足所有人的要求,输出 T-shirts rock! 否则输出 I'd rather not wear a shirt anyway...
阅读全文
摘要:题意:N头牛M个牛棚,每只牛都有它自己指定的若干个它愿意呆的牛棚。每个牛棚最多呆一头牛。问最多可以满足多少头牛的愿望。思路:裸二分图最大匹配。代码:int n,m;vector graph[205];int cx[205],cy[205];bool bmask[205];int findPath(i...
阅读全文
摘要:题意:M*N的矩阵,每个格不是*就是#。 *代表水坑,#代表草地。农民要每次可以用一块宽为1,长不限的木板去铺这个矩阵。要求这块木板不能覆盖草地。木板可以重复覆盖(即一块木板与另一块木板有交叉重叠的部分)。问农民最少需要操作多少次可以覆盖所有的水坑。思路 :与Battle Ships那题非常像,代码...
阅读全文
摘要:题意:M*N的矩阵,每个格子上是三个之一:*、o、#。 (1 graph[2505];int findPath(int u){ int L=graph[u].size(); rep(i,0,L-1){ int v=graph[u][i]; if(!bma...
阅读全文
摘要:题意:N行M列的矩阵,每个格子里不是 * 就是 O 。* :是一个利益点。O:是一个空白点。每次可以用一个圈覆盖相邻的两个*。(左右相邻或上下相邻)。问最少需要多少个圈可以覆盖所有的*。思路:把每个格子变成一个数,总共有N*M个数。构造二分图,左右的数字都分别是1....N*M。若两个*可以被一个圈...
阅读全文
摘要:题意:N*N的矩阵,有K个敌人,坐标分别是(C1,C1),.....,(Rk,Ck)。有一个武器,每发射一次,可消掉某行或某列上的所有的敌人。问消灭所有敌人最少需要多少发。思路:二分建图:左边N个点代表行号,右边N个点代表列号。如果第i行第j列上有敌人,则将左边点i和右边点j连一条线。则转化为求此二...
阅读全文
摘要:最小点覆盖:用最少的点(X集合或Y集合都的都行)让每条边都至少和其中一个点关联。可以证明:最少的点(即覆盖数)= 最大区配数M简单证明:(1)M个是足够的。只需要让它们覆盖最大匹配的M条边,则其它边一定被覆盖(如果有边e不被覆盖,把e加入后得到一个更大的匹配) M条边只需覆盖每条边两点中的某点(...
阅读全文
摘要:题意:P门课,N个学生。 (1 graph[505];bool bmask[505];int cx[505],cy[505];int findPath(int u){ int L=graph[u].size(); rep(i,0,L-1){ int v=graph[u][...
阅读全文
摘要:/*匈牙利算法DFS版*/const int MAXN=300; //最大顶点数bool bmap[MAXN][MAXN]; //二分图bool bmask[MAXN]; //寻找增广路径时的标志数组int nx,ny; ...
阅读全文
摘要:题意:给你N个数,a1,,,,an。代表第i个管子里有ai个珍珠。规定只能往每根管里增加k的倍数个珍珠。如果存在一套操作,操作完毕后可以得到1~N的一个排列,则Jerry赢,否则Tom赢。问谁赢。思路:将a1...an从小到大排序,可知道每根管里的数只能增不能减。将最后的1...N中的每个数一定是由...
阅读全文
摘要:题意:n个数p1,p2....pn 两个数a,b把它们分成A,B两个集合。若x属于A,a-x一定属于A。若x属于B,b-x一定属于B。问是否可能将这n个数分成两个集合。若可以,输出每个数是属于A集合还是B集合(0:集合A,1:集合B)思路:这题我用二分图最大匹配做的。他们用并查集,额.. 一开始...
阅读全文
浙公网安备 33010602011771号