uva 11159 Factors and Multiples
来源:互联网 发布:手机视频直播软件 编辑:程序博客网 时间:2024/06/06 09:11
You will be given two sets of integers. Let�s call them set A and set B. Set A contains n elements and set B contains m elements. You have to remove k1 elements from set A and k2 elements from set B so that of the remaining values no integer in set B is a multiple of any integer in setA. k1 should be in the range [0,n] and k2 in the range [0,m].
You have to find the value of (k1+k2) such that (k1+k2) is as low as possible.
P is a multiple of Q if there is some integer K such that P = K * Q.
Suppose set A is {2,3,4,5} and set B is {6,7,8,9}. By removing 2 and 3 from A and 8 from B, we get the sets {4,5} and{6,7,9}. Here none of the integers 6, 7 or 9 is a multiple of 4 or 5.
So for this case the answer is 3 (2 from set A and 1 from set B).
Input
The first line of input is an integer T(T<50) that determine the number of test cases. Each case consists of two lines. The first line starts with nfollowed by n integers. The second line starts with m followed by m integers. Both n and m will be in the range [1,100]. All the elements of the two sets will fit in 32 bit signed integer.
Output
For each case, output the case number followed by the answer.
Sample Input
Output for Sample Input
2
4 2 3 4 5
4 6 7 8 9
3 100 200 300
1 150
Case 1: 3
Case 2: 0
Problem Setter: Sohel Hafiz
Special Thanks: Jane Alam Jan
题目大意:
A 和 B 两个集合,从A里面删除一些数 K1 个,从 B里面删除一些数 K2 个,使得 B 中的任何一个元素 都不是 A中 的任意一个数的倍数。
解题思路:
二部图最大匹配,只要将最大匹配中的全部左边或右边点删掉即可。
解题代码:
- #include <iostream>
- #include <cstring>
- #include <cstdio>
- #include <cmath>
- #include <set>
- #include <algorithm>
- using namespace std;
- const int maxn=110;
- int path[maxn][maxn],visited[maxn],link[maxn];
- int n,m,a[maxn],b[maxn];
- int can(int x){
- for(int i=0;i<m;i++){
- if(visited[i]==-1 && path[x][i]>0){
- visited[i]=1;
- if( link[i]==-1 || can(link[i]) ){
- link[i]=x;
- return 1;
- }
- }
- }
- return 0;
- }
- void solve(int casen){
- int ans=0;
- for(int i=0;i<n;i++)
- for(int j=0;j<m;j++){
- if(a[i]==0){
- if(b[j]!=0) continue;
- else path[i][j]=1;
- }
- else if(b[j]%a[i]==0){
- path[i][j]=1;
- }
- }
- for(int i=0;i<n;i++){
- memset(visited,-1,sizeof(visited));
- if(can(i)) ans++;
- }
- printf("Case %d: %d\n",casen,ans);
- }
- int main(){
- //freopen("in.txt","r",stdin);
- int t;
- scanf("%d",&t);
- for(int k=1;k<=t;k++){
- memset(path,0,sizeof(path));
- memset(link,-1,sizeof(link));
- scanf("%d",&n);
- for(int i=0;i<n;i++) scanf("%d",&a[i]);
- scanf("%d",&m);
- for(int i=0;i<m;i++) scanf("%d",&b[i]);
- solve(k);
- }
- return 0;
- }
- uva 11159 Factors and Multiples
- uva 11159 Factors and Multiples
- UVA 11159Factors and Multiples (最大独立集)
- UVa11159 - Factors and Multiples(二分匹配)
- LightOJ 1149 - Factors and Multiples【二分图最大匹配】
- LightOJ - 1149 Factors and Multiples(二分图匹配)
- UVa11159 - Factors and Multiples(二分匹配匈牙利算法)
- lightoj1149 - Factors and Multiples【二分图最大匹配】
- LightOJ--1149--Factors and Multiples(二分图好题)
- Light oj 1149 - Factors and Multiples【最大匹配】
- LightOJ 1149 Factors and Multiples 最大匹配--匈牙利算法
- light oj 1149 - Factors and Multiples (二分匹配)
- Factors and Multiples(二分图匹配)LightOJ
- UVa 160 - Factors and Factorials
- UVa 160-Factors and Factorials
- UVa 160 Factors and Factorials
- Light oj 1149 - Factors and Multiples 【二分图最大匹配】【好题】
- Light oj 1149--Factors and Multiples【二分匹配 && 经典建图】
- UFT QTP 12 试用
- Opencv--Hog源码分析
- 让DIV可编辑
- dos2unix与静态库
- Linux下字符串转时间tm结构函数strptime
- uva 11159 Factors and Multiples
- 手把手教你搭建vim的IDE环境
- undefined reference to `pthread_join'解决办法
- android SDK中添加自定义api
- 采药
- 【java大文件复制】
- 求两个复数的加减乘
- Java多态性
- 编程中的命名设计那点事(转)