1305: [CQOI2009]dance跳舞
Time Limit: 5 Sec Memory Limit: 162 MB
Submit: 3076 Solved: 1296
[Submit][Status][Discuss]
Description
一次舞会有n个男孩和n个女孩。每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞。每个男孩都不会和同一个女孩跳两首(或更多)舞曲。有一些男孩女孩相互喜欢,而其他相互不喜欢(不会“单向喜欢”)。每个男孩最多只愿意和k个不喜欢的女孩跳舞,而每个女孩也最多只愿意和k个不喜欢的男孩跳舞。给出每对男孩女孩是否相互喜欢的信息,舞会最多能有几首舞曲?
Input
第一行包含两个整数n和k。以下n行每行包含n个字符,其中第i行第j个字符为'Y'当且仅当男孩i和女孩j相互喜欢。
Output
仅一个数,即舞曲数目的最大值。
Sample Input
3 0
YYY
YYY
YYY
Sample Output
3
HINT
N<=50 K<=30
Source
Solve:
我真是蠢飞了 先花了一个正解然后觉得自己不对 又删掉了……
事实证明是对的 只需要套个二分就可以了
这个题交给我一件事:bzoj每个int、bool类函数都需要有返回值 不然T的挺挺的
说说题解:首先我们拆点,每个点认为是和他喜欢的或不喜欢的跳舞 喜欢的拆成i,不喜欢的拆成i'
然后i->i'连一条k的边
然后S到每个i(男或女?反正其中一个,然后j是另一种)连一条INF的边,每个j到T连一条INF边
对于[i,j],假如map[i,j]='Y'连边(i,j,1),否则连边(i',j',1)
最后二分答案 验证一下就好了
/*To The End Of The Galaxy*/
#include
#include
#include
#include
#include
#include
#include
#include
#include