首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
zoj3988
】的更多相关文章
zoj3988
zoj3988 题意 如果一个集合 \(\{i,j\}\) 满足 \(i\neq j\) 且 \(a[i]+a[j]\) 是素数,则称之为素数集合. 给出一些数字,这些数字可以组成多种素数集合,从这些集合中最多选择 \(k\) 个集合,问这些集合涉及到的数的数量最大值为多少. 分析 存在匹配关系即 \(a[i]+a[j]\) 是素数,那么 \(i\) \(j\) 就可以连边,要求两个数的和为素数,那么这两个数一定有一奇数一偶数(也有可能两个 \(1\)),将奇数放左边,偶数放右边,建二分图.求一…
2017CCPC秦皇岛 H题Prime Set&&ZOJ3988
题意: 定义一种集合,只有两个数,两个数不同且加起来为素数.要从n个数里抽出数字组成该集合(数字也可以是1~n,这个好懵圈啊),要求你选择最多k个该种集合组成一个有最多元素的集合,求出元素的数量. 思路: 代码: #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <vector> using namespace std; +…
【二分图最大匹配】【匈牙利算法】zoj3988 Prime Set
题意:给你n个正整数,一对和为素数的数为一个合法数对.你选不超过K个合法数对,使得你选的数对涉及到的数的数量最大化.输出这个值. 所有1之间是可以任意两两配对的. 把奇数放在左侧,偶数放在右侧. 考虑当前要使用多少个“1”,动态更新最大匹配. 如果K不超过 最大匹配数 + 剩下的还没使用过的1数/2 ,那么直接输出这个和*2即可. 否则剩下的用剩余的1(最多一个)+没被匹配上的但是不孤立(有边)的点数 补齐,这样不断更新答案. 有一个坑点是如果1恰好只有一个的话,而且没有能和它加起来组成素数的数…
zoj3988 二分图匹配
给一个数组,对于每两个数加起来为素数那么就是一个集合,求不超过k个集合的最多数是多少 解法:二分图匹配,先打素数筛,预处理边集,匹配完之后分两种情况k>匹配数,那么可以直接输出匹配数*2,否则可以选取匹配数*2+min(k-匹配数,剩余没有匹配的而且有边的点),这里是因为没有匹配的点有边,连着之前匹配过的点,我们可以复用,只要保证不超过k个集合就可以了, #include<bits/stdc++.h> #include<ext/rope> #define fi first #…
zoj3988 Prime Set
思路不难想到二分图求个最大匹配P,若P>=K,则2*K即可,否则应为P*2+min(K-P,未匹配且有度数不为0的顶点个数s).但坑点在于有1的情况,所以如果直接建二分图去跑最大匹配会因为1的影响而无法得到实际上的最大匹配,所以索性不建二分图而直接去跑最大匹配,此时应记录的是每个顶点的匹配顶点即可. #include<cstdio> #include<cstdlib> #include<iostream> #include<string> #inclu…
ZOJ-3988 2017CCPC-秦皇岛 Prime Set 二分图最大匹配 匈牙利
题面 题意:给你n个数,你可以选择2个和为质数的数为一对,每个数可以重复选择,你最多选k对,问你最多能选多少个不同数出来 题解:首先思考怎么样的数和为质数,2个偶数相加不行,除了1+1以外2个奇数相加不行,那么大致上,就是偶数+奇数, 这样很明显的发现这就是一个二分图,而且这是自动分好的,并不需要你建边的时候特殊考虑 所以对于能够加成质数的组合连边,跑最大匹配,如果现在有大于等于k个,那答案肯定就是选k个,每个里面一奇一偶,所以答案==k*2 可要现在不够k个呢? 还是先选ans*2个,剩下的,…