Lightoj1356】的更多相关文章

题目链接:https://vjudge.net/problem/LightOJ-1356 题目大意: T个 test case,每个 test case 给出一个 N 个数的集合.请找出一个最大的子集,使得子集中的任何一个数除以子集中的任意的另一个数所得到的数不是质数. 解题思路: 先用素数筛找出 1 到 500000 的所有质数. 在输入一个集合的时候,我们顺便记录下输入的这个数在输入数组中的位置,找出它的所有质因数,记录下质因数的总个数,用一个vector记录下所有 “不同的” 质因数. 遍…
题意: 找出一个集合中的最大独立集,任意两数字之间不能是素数倍数的关系. 思路: 最大独立集,必然是二分图. 最大数字50w,考虑对每个数质因子分解,然后枚举所有除去一个质因子后的数是否存在,存在则建边,考虑到能这样建边的数一定是质因子个数奇偶不同,所以相当于按奇偶区分建立了二分图,然后求二分图最大匹配,得到最大独立集就行了. 有一点这个题数据比较大,直接匈牙利炸了,要Hopcroft-Karp优化才能过. #include <iostream> #include <cstring>…