首先我们有一个定理:最大独立子集 = 结点数量 - 最大匹配。
然后这题关键就在于建图了,假设 a = p r i m e ∗ b a=prime*b a=prime∗b ,我们考虑 a , b a,b a,b 中质因子个数为奇数的数连到质因子个数为偶数的数上面。(反正就是确定一个有向图方向,统一即可)
然后我们跑二分图匹配算法,这里用的是 H K HK HK 算法。
有个奇怪的点我现在也没想明白,这里的初始化 i n i t init init 的除 b e f o r e before before 以外的 m e m s e t memset memset 要是换成 ( n + 1 ) ∗ s i z e o f ( i n t ) (n+1)*sizeof(int) (n+1)∗sizeof(int),然后结果就会 W A WA WA。
代码如下:
#include<iostream>
#include<vector>
#include<string.h>
#include<queue>