质数相关

Time Limit: 1 Sec  Memory Limit: 256 MB

题目连接

http://hihocoder.com/contest/msbop2015round2a/problem/3

Description

两个数a和 b (a<b)被称为质数相关,是指a × p = b,这里p是一个质数。一个集合S被称为质数相关,是指S中存在两个质数相关的数,否则称S为质数无关。如{2, 8, 17}质数无关,但{2, 8, 16}, {3, 6}质数相关。现在给定一个集合S,问S的所有质数无关子集中,最大的子集的大小。

Input

第一行为一个数T,为数据组数。之后每组数据包含两行。

第一行为N,为集合S的大小。第二行为N个整数,表示集合内的数。

Output

对于每组数据输出一行,形如"Case #X: Y"。X为数据编号,从1开始,Y为最大的子集的大小。

Sample Input

3
5
2 4 8 16 32
5
2 3 4 6 9
3
1 2 3

Sample Output

Case #1: 3
Case #2: 3
Case #3: 2

HINT

1 ≤ T ≤ 20

集合S内的数两两不同且范围在1到500000之间。

小数据

1 ≤ N ≤ 15

大数据

1 ≤ N ≤ 1000

题意

题解:

首先我们把题目转化一下,我们由所给的质数关系,我们可以得到 每一个数可以和哪些数在一起的图

然后我们就可以转化成二分图的最大匹配了!

唔 另一道题可见:http://www.cnblogs.com/qscqesze/p/4414246.html

代码:

  1. //qscqesze
  2. #include <cstdio>
  3. #include <cmath>
  4. #include <cstring>
  5. #include <ctime>
  6. #include <iostream>
  7. #include <algorithm>
  8. #include <set>
  9. #include <vector>
  10. #include <sstream>
  11. #include <queue>
  12. #include <typeinfo>
  13. #include <fstream>
  14. #include <map>
  15. #include <stack>
  16. typedef long long ll;
  17. using namespace std;
  18. //freopen("D.in","r",stdin);
  19. //freopen("D.out","w",stdout);
  20. #define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
  21. #define maxn 200001
  22. #define mod 10007
  23. #define eps 1e-9
  24. int Num;
  25. char CH[];
  26. //const int inf=0x7fffffff; //нчоч╢С
  27. const int inf=0x3f3f3f3f;
  28. /*
  29.  
  30. inline void P(int x)
  31. {
  32. Num=0;if(!x){putchar('0');puts("");return;}
  33. while(x>0)CH[++Num]=x%10,x/=10;
  34. while(Num)putchar(CH[Num--]+48);
  35. puts("");
  36. }
  37. */
  38. //**************************************************************************************
  39. inline ll read()
  40. {
  41. int x=,f=;char ch=getchar();
  42. while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
  43. while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
  44. return x*f;
  45. }
  46. inline void P(int x)
  47. {
  48. Num=;if(!x){putchar('');puts("");return;}
  49. while(x>)CH[++Num]=x%,x/=;
  50. while(Num)putchar(CH[Num--]+);
  51. puts("");
  52. }
  53. const int MAXN = ;
  54. bool flag[MAXN];
  55. int primes[MAXN], pi;
  56. void GetPrime_1()
  57. {
  58. int i, j;
  59. pi = ;
  60. memset(flag, false, sizeof(flag));
  61. for (i = ; i < MAXN; i++)
  62. if (!flag[i])
  63. {
  64. primes[i] = ;//素数标识为1
  65. for (j = i; j < MAXN; j += i)
  66. flag[j] = true;
  67. }
  68. }
  69.  
  70. vector<int> q[maxn];
  71. int vis[maxn];
  72. int match[maxn];
  73. int a[maxn];
  74. bool cmp(int b,int c)
  75. {
  76. return b>c;
  77. }
  78. int dfs(int x)
  79. {
  80. for(int i=;i<q[x].size();i++)
  81. {
  82. if(vis[q[x][i]]==)
  83. {
  84. vis[q[x][i]]=;
  85. if(match[q[x][i]]==-||dfs(match[q[x][i]]))
  86. {
  87. match[q[x][i]]=x;
  88. return ;
  89. }
  90. }
  91. }
  92. return ;
  93. }
  94. int main()
  95. {
  96. GetPrime_1();
  97. primes[]=;
  98. int t=read();
  99. for(int cas=;cas<=t;cas++)
  100. {
  101. memset(match,-,sizeof(match));
  102. int n=read();
  103. for(int i=;i<n;i++)
  104. q[i].clear();
  105. for(int i=;i<n;i++)
  106. a[i]=read();
  107. sort(a,a+n,cmp);
  108. for(int i=;i<n;i++)
  109. {
  110. for(int j=;j<n;j++)
  111. {
  112. if(i==j)
  113. continue;
  114. int b=a[j];
  115. int c=a[i];
  116. if(b<c)
  117. swap(b,c);
  118. if(b%c==&&primes[b/c])
  119. {
  120. q[j].push_back(i);
  121. }
  122. }
  123. }
  124. int ans=;
  125. for(int i=;i<n;i++)
  126. {
  127. memset(vis,,sizeof(vis));
  128. if(dfs(i))
  129. ans++;
  130. }
  131. printf("Case #%d: %d\n",cas,n-ans/);
  132. }
  133.  
  134. }

2015编程之美 初赛第一场C题 质数相关 二分图的最大匹配的更多相关文章

  1. 2015 编程之美初赛第一场 AC题

    题目1 : 彩色的树 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定一棵n个节点的树,节点编号为1, 2, …, n.树中有n - 1条边,任意两个节点间恰好有一条路 ...

  2. 编程之美初赛第二场AB

    题目1 : 扑克牌 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 一副不含王的扑克牌由52张牌组成,由红桃.黑桃.梅花.方块4组牌组成,每组13张不同的面值.现在给定52 ...

  3. hdu 5288||2015多校联合第一场1001题

    pid=5288">http://acm.hdu.edu.cn/showproblem.php?pid=5288 Problem Description OO has got a ar ...

  4. # 「银联初赛第一场」自学图论的码队弟弟(dfs找环+巧解n个二元一次方程)

    「银联初赛第一场」自学图论的码队弟弟(dfs找环+巧解n个二元一次方程) 题链 题意:n条边n个节点的连通图,边权为两个节点的权值之和,没有「自环」或「重边」,给出的图中有且只有一个包括奇数个结点的环 ...

  5. 2019年牛客多校第一场B题Integration 数学

    2019年牛客多校第一场B题 Integration 题意 给出一个公式,求值 思路 明显的化简公式题,公式是分母连乘形式,这个时候要想到拆分,那如何拆分母呢,自然是裂项,此时有很多项裂项,我们不妨从 ...

  6. [2015编程之美] 第一场C

    题目3 : 质数相关 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 两个数a和 b (a<b)被称为质数相关,是指a × p = b,这里p是一个质数.一个集合S被 ...

  7. hihocoder 微软编程之美2015 初赛 第一场 (树算法 + 暴力思想 + 搜索思想)

    题目1 : 彩色的树 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定一棵n个节点的树,节点编号为1, 2, …, n.树中有n - 1条边,任意两个节点间恰好有一条路 ...

  8. 计蒜之道 初赛第一场B 阿里天池的新任务(简单)

    阿里“天池”竞赛平台近日推出了一个新的挑战任务:对于给定的一串 DNA 碱基序列 tt,判断它在另一个根据规则生成的 DNA 碱基序列 ss 中出现了多少次. 首先,定义一个序列 ww: \displ ...

  9. 校省选赛第一场A题Cinema题解

    今天是学校省选的第一场比赛,0战绩收工,死死啃着A题来做,偏偏一直WA在TES1. 赛后,才发现,原来要freopen("input.txt","r",stdi ...

随机推荐

  1. dlmalloc(一)【转】

    转自:http://blog.csdn.net/ycnian/article/details/12971863 我们写过很多C程序了,经常会分配内存.记得刚学C语言时老师说过,可以向两个地方申请内存: ...

  2. offset宏的讲解【转】

    转自:http://blog.csdn.net/tigerjibo/article/details/8299584 1.offset宏讲解 #define offsetof(TYPE, MEMBER) ...

  3. 细说show slave status参数详解(最全)【转】

    在搭建好mysql主从之后,我们一般在从库上通过命令 show slave status\G 来查看主从的状态,会有很多的参数,接下来笔者就带大家好好的了解这些参数 root@localhost (n ...

  4. Homestead在windows7 下的搭建

    遇到的问题有 1.Homestead 的版本问题,教程git版本是 v5,最新是v7的,如果用最新,就要求vagrant的版本是 2.0的: 2.启动homestead后,出现 No input fi ...

  5. [ python ] 集合的使用

    集合的使用 可变数据类型,他里面的元素必须是不可变的数据类型,无序,不重复. 集合的增删查 集合是没有改这种说法的: (1)集合的元素无序的: (2)集合的元素为不可变类型  增加 add    为集 ...

  6. C# 随笔 【ToList().Foreach()和Foreach()】

    1. 最近在做一个Socket通讯的例子,但是如果使用UTF-8编码传输中文的话取和的会不一样.早上做了测试 . string str = "a我..";看代码中间是一个英文,一个 ...

  7. Otto:EventBus

    Otto:EventBus 2014年6月20日 星期五 15:14 参考: http://www.mythroad.net/?p=4151 Otto 是Android系统的一个Event Bus模式 ...

  8. Erasure Coding(纠删码)深入分析 转

    1.前言 Swift升级到2.0大版本后宣称开始支持纠删码,这其实是一个很有意义的特性,主要是能够在一定程度上解决3副本空间浪费太多的问题.因为3副本这一点是swift推广的最大障碍之一,成本的增加吓 ...

  9. LeetCode818. Race Car

    https://leetcode.com/problems/race-car/description/ Your car starts at position 0 and speed +1 on an ...

  10. csu 1798(树上最远点对,线段树+lca)

    1798: 小Z的城市 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 60  Solved: 16[Submit][Status][Web Board] ...