UVa 11159 - Factors and Multiples Solution

#include <iostream>
#include <vector>
#include <bitset>
using namespace std;
int cs=1,t,n,m;
vector<vector<int> > b;
vector<int> A,B;
vector<int> match;
bitset<500> vis;
int aug(int u){
    if(vis[u])
        return 0;
    vis[u]=1;
    for(int i=0;i<b[u].size();i++){
        int v=b[u][i];
        if(match[v]==-1||aug(match[v])){
            match[v]=u;
            return 1;
        }
    }
    return 0;
}
int main(){
    cin>>t;
    while(t--){
        cin>>n;
        A.assign(n,0);
        b.assign(n,vector<int>());
        for(int i=0;i<n;i++)
            cin>>A[i];
        cin>>m;
        B.assign(m,0);
        for(int i=0;i<m;i++)
            cin>>B[i];
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
                if((A[i]==0&&B[j]==0)||(A[i]&&B[j]%A[i]==0))
                    b[i].push_back(j);
        int ans=0;
        match.assign(m,-1);
        for(int i=0;i<n;i++){
            vis.reset();
            ans+=aug(i);
        }
        cout<<"Case "<<cs++<<": "<<ans<<endl;
    }
}

Comments