Description

小N最近在研究NP完全问题,小O看小N研究得热火朝天,便给他出了一道这样的题目:
有n个球,用整数1到n编号。还有m个筐子,用整数1到m编号。
每个筐子最多能装3个球。
每个球只能放进特定的筐子中。具体有e个条件,第i个条件用两个整数vi和ui描述,表示编号为vi的球可以放进编号为ui的筐子中。
每个球都必须放进一个筐子中。如果一个筐子内有不超过1个球,那么我们称这样的筐子为半空的。
求半空的筐子最多有多少个,以及在最优方案中,每个球分别放在哪个筐子中。
小N看到题目后瞬间没了思路,站在旁边看热闹的小I嘿嘿一笑:“水题!”
然后三言两语道出了一个多项式算法。
小N瞬间就惊呆了,三秒钟后他回过神来一拍桌子:
“不对!这个问题显然是NP完全问题,你算法肯定有错!”
小I浅笑:“所以,等我领图灵奖吧!”
小O只会出题不会做题,所以找到了你——请你对这个问题进行探究,并写一个程序解决此题。
 

Input

第一行包含1个正整数T,表示有T组数据。
对于每组数据,第一行包含3个正整数n,m,e,表示球的个数,筐子的个数和条件的个数。
接下来e行,每行包含2个整数vi,ui,表示编号为vi的球可以放进编号为ui的筐子。

Output

 对于每组数据,先输出一行,包含一个整数,表示半空的筐子最多有多少个。

Sample Input

1
4 3 6
1 1
2 1
2 2
3 2
3 3
4 3

Sample Output

2

HINT

 

 对于所有数据,T≤5,1≤n≤3m。保证 1≤vi≤n,1≤ui≤m,且不会出现重复的条件。

保证至少有一种合法方案,使得每个球都放进了筐子,且每个筐子内球的个数不超过 3。
M<=100
uoj的题目还需要输出一个方案  但是输出方案这里显然我就sb了 调了 很久 发现是思想有误
如果说上来就瞎jb暴力 其实有60分 然而我这个辣鸡..当模拟的时候只搞到50  全场最菜 垫底..
前面的一部分分直接暴力搜索可搞 然后n*m的  贪心放 首先每个都放一个 然后能放的就尽量都集中放起来
剩下的部分分就跑两遍网络流 每个点向每个筐连1  每个筐向汇连1 然后网络流跑一遍验证即可 如果不满足条件说明答案是0 那么就重建图 把筐向汇点连的边改为3 输出即可

正解:带花树+思路

首先把每个筐拆成三个点 然后给其中的两个点连上边 然后我 这个物品分别向他给出的条件的那三个点都连一下 可以yy一下  三个点都连起来和只给两条边连起来的效果是一样的因为我只需要满足这样一种关系即可 即:如果没有球向他连,自己匹配贡献1  如果有球向他连接 球的匹配+自己匹配-球*1 正好也满足条件  (这时候如果是三条边就比较好想   然后 再往上依此类推即可

最后输出的时候方案数就是匹配数-n

uoj还要输出方案数这时候就需要注意一些了 我必须要首先去匹配物品和框之间的边 然后再匹配框内互相匹配的情况 否则输出方案不对

 


elijahqi

辣鸡蒟蒻一枚qwq 欢迎加qq qwq 2922945330

发表评论