Educational Codeforces Round 12 D. Simple Subset 最大团
题目连接:
http://www.codeforces.com/contest/665/problem/D
Description
A tuple of positive integers {x1, x2, ..., xk} is called simple if for all pairs of positive integers (i, j) (1 ≤ i < j ≤ k), xi + xj is a prime.
You are given an array a with n positive integers a1, a2, ..., an (not necessary distinct). You want to find a simple subset of the array a with the maximum size.
A prime number (or a prime) is a natural number greater than 1 that has no positive divisors other than 1 and itself.
Let's define a subset of the array a as a tuple that can be obtained from a by removing some (possibly all) elements of it.
Input
The first line contains integer n (1 ≤ n ≤ 1000) — the number of integers in the array a.
The second line contains n integers ai (1 ≤ ai ≤ 106) — the elements of the array a.
Output
On the first line print integer m — the maximum possible size of simple subset of a.
On the second line print m integers bl — the elements of the simple subset of the array a with the maximum size.
If there is more than one solution you can print any of them. You can print the elements of the subset in any order.
Sample Input
2
2 3
Sample Output
2
3 2
Hint
题意
给你n个数,你需要找到一个最大的子集,使得这个子集中的任何两个数加起来都是质数。
题解:
无视掉1的话,我们最多选择一个奇数和一个偶数,因为奇数+奇数=偶数,偶数加偶数=偶数
所以直接暴力枚举就好了。
另外这道题如果建边的话,跑dfs直接莽一波最大团也可以……
我是一个智障,我就跑了最大团 QAQ
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1005;
int pri[2000005];
bool flag[maxn], a[maxn][maxn];
int ans, cnt[maxn], group[maxn], n, vis[maxn];
// 最大团: V中取K个顶点,两点间相互连接
// 最大独立集: V中取K个顶点,两点间不连接
// 最大团数量 = 补图中最大独立集数bool dfs( int u, int pos ){int i, j;for( i = u+1; i <= n; i++){if( cnt[i]+pos <= ans ) return 0;if( a[u][i] ){// 与目前团中元素比较,取 Non-N(i)for( j = 0; j < pos; j++ ) if( !a[i][ vis[j] ] ) break;if( j == pos ){ // 若为空,则皆与 i 相邻,则此时将i加入到 最大团中vis[pos] = i;if( dfs( i, pos+1 ) ) return 1;}}}if( pos > ans ){for( i = 0; i < pos; i++ )group[i] = vis[i]; // 最大团 元素ans = pos;return 1;}return 0;
}
void maxclique()
{ans=-1;for(int i=n;i>0;i--){vis[0]=i;dfs(i,1);cnt[i]=ans;}
}
void pre()
{pri[1]=1;pri[0]=1;for(int i=2;i<2000005;i++){if(pri[i])continue;for(int j=i+i;j<2000005;j+=i)pri[j]=1;}
}
int aa[maxn];
int main()
{pre();scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&aa[i]);for(int i=1;i<=n;i++)for(int j=1;j<i;j++)if(!pri[aa[i]+aa[j]])a[i][j]=1,a[j][i]=1;maxclique();cout<<ans<<endl;for(int i=0;i<ans;i++)cout<<aa[group[i]]<<" ";cout<<endl;
}
转载于:https://www.cnblogs.com/qscqesze/p/5419069.html
Educational Codeforces Round 12 D. Simple Subset 最大团相关推荐
- Educational Codeforces Round 12 C. Simple Strings 贪心
C. Simple Strings 题目连接: http://www.codeforces.com/contest/665/problem/C Description zscoder loves si ...
- Educational Codeforces Round 12 A. Buses Between Cities 水题
A. Buses Between Cities 题目连接: http://www.codeforces.com/contest/665/problem/A Description Buses run ...
- Educational Codeforces Round 12 B. Shopping 暴力
B. Shopping 题目连接: http://www.codeforces.com/contest/665/problem/B Description Ayush is a cashier at ...
- 双联通分量求简单环(Educational Codeforces Round 42: F. Simple Cycles Edges)
题意: n个点m条边的无向图,问有哪些边在一个简单环上,按顺序输出这些边的编号 思路: 对于无向图求出每个双联通分量,对于每个双联通分量,如果点的个数==边的个数,那么这个双联通分量就是个简单环,输出 ...
- Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...
- Educational Codeforces Round 32
http://codeforces.com/contest/888 A Local Extrema[水] [题意]:计算极值点个数 [分析]:除了第一个最后一个外,遇到极值点ans++,包括极大和极小 ...
- Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)
Educational Codeforces Round 90 (Rated for Div. 2) Donut Shops 思路 分三种情况: a==c/ba == c / ba==c/b这个时候两 ...
- Educational Codeforces Round 89 (Rated for Div. 2)(A, B, C, D)
Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords 思路 题意非常简单,就是得到最多的物品嘛,我们假定a, ...
- Educational Codeforces Round 104 (Rated for Div. 2)A~E解题报告
Educational Codeforces Round 104 (Rated for Div. 2) A. Arena \quad原题链接 http://codeforces.com/contest ...
最新文章
- 在执行ab压力测试时出现socket: Too many open files (24)的解决方法
- 每日一皮:你们都是怎么解压的?
- 时间选择控件在不同场景下的应用
- MySql 自适应哈希索引
- [Python图像处理] 五.图像融合、加法运算及图像类型转换
- 关于HTML的面试题-html4/css2篇
- VC6编译卡死之解决办法
- 计算机科学与技术班级口号八字,班级的八字口号
- idea shell 使用linux_Linux使用shell定时任务实现ffmpeg视频转码和截图
- Oracle 查看 表 存储过程 触发器 函数 等对象定义语句的方法
- SQL Server 将在下一个版本实现内存中运行
- 6. 卷2(进程间通信)---System V 消息队列
- html5 dom 结构,HTML5 DOM扩展
- mac 10.9 安装 mysql_mac 下安装 mysql (蛋疼)
- Android oem 解锁
- 双显示器 启动黑屏 黑苹果_黑苹果开机加载黑屏
- UVALive 6436 The Busiest City
- 注解处理器(Annoation Processor)
- react,tsx中使用微信jssdk分享总结
- 关系与关系模式的区别——易懂
热门文章
- 使用Eclipse编译运行MapReduce程序 Hadoop2.6.0/Ubuntu
- muduo之GzipFile
- 开发相关手册、STM32各种库文件、相关软件、工具连接等(不断更新)
- Arduino编程之Serial.println()和Serial.print()
- 4.STM32中对USART1_Config()函数的理解(自定义)
- 不同位数编译器下的基本数据类型所占的字节数(字节大小):
- main 函数内的变量是全局变量,还是局部变量?
- python六十: __doc__属性
- python二十二:迭代,三元表达式,列表解析
- java操作ad域 免证书