Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // main.cpp
- // E
- //
- // Created by Wasin Kalintha on 7/31/12.
- // Copyright 2012 Chulalongkorn University. All rights reserved.
- //
- #include <cstdio>
- #include <cstring>
- #include <set>
- using namespace std;
- const int N(500);
- const int UNDEF(-1);
- set<int> s;
- int _pair[N], a[N];
- bool used[N];
- int R, B;
- bool dfs(int now){
- used[now] = true;
- for(int j = 0; j < R; j++){
- if(used[j]) continue;
- if(_pair[j] == UNDEF and s.find(a[now] + a[j]) != s.end()){
- _pair[now] = j;
- _pair[j] = now;
- return true;
- }
- }
- for(int j = 0; j < R; j++){
- if(used[j]) continue;
- if(s.find(a[now] + a[j]) != s.end()){
- _pair[now] = j;
- int k = _pair[j];
- _pair[j] = now;
- _pair[k] = UNDEF;
- used[j] = true;
- if(dfs(k)) return true;
- }
- }
- return false;
- }
- void solve(){
- s.clear();
- scanf("%d %d", &R, &B);
- for(int i = 0; i < R; i++){
- _pair[i] = UNDEF;
- scanf("%d", &a[i]);
- }
- for(int i = 0; i < B; i++){
- int k;
- scanf("%d", &k);
- s.insert(k);
- }
- int ans = 0;
- while(true){
- bool hasAug = false;
- for(int i = 0; i < R; i++){
- if(_pair[i] == UNDEF){
- memset(used, 0, sizeof(used));
- if(dfs(i)){
- hasAug = true;
- ans++;
- break;
- }
- }
- }
- if(not hasAug) break;
- }
- printf("%d\n", ans);
- }
- int main(){
- int n;
- scanf("%d", &n);
- while(n--) solve();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement