• Source
    1. #include<stdio.h>
    2. #include<iostream>
    3. #include<vector>
    4. #include<string.h>
    5. using namespace std;
    6.  
    7. long long arr[102];
    8. long long arr1[102];
    9.  
    10. int match[205];
    11. bool visit[205];
    12.  
    13. vector<int>vec[205];
    14.  
    15.  
    16. int dfs(int node)
    17. {
    18. int x=vec[node].size();
    19.  
    20. for(int i=0; i<x; i++)
    21. {
    22. int j=vec[node][i];
    23.  
    24. if(visit[j])
    25. {
    26. continue;
    27. }
    28.  
    29. visit[j]=true;
    30.  
    31. if(match[j]<0 || dfs(match[j]))
    32. {
    33. match[j]=node;
    34.  
    35. return 1;
    36. }
    37. }
    38. return 0;
    39. }
    40.  
    41. int main()
    42. {
    43. long long x,test,i,j,n,m,cnt;
    44.  
    45. scanf("%lld",&test);
    46.  
    47. for(x=1; x<=test; x++)
    48. {
    49. scanf("%lld",&n);
    50. for(i=1; i<=n; i++)
    51. {
    52. scanf("%lld",&arr[i]);
    53. }
    54. scanf("%lld",&m);
    55. for(i=1; i<=m; i++)
    56. {
    57. scanf("%lld",&arr1[i]);
    58. }
    59.  
    60. for(i=1; i<=n; i++)
    61. {
    62. for(j=1; j<=m; j++)
    63. {
    64. if(arr[i]==0 && arr1[j]==0)
    65. {
    66. vec[i].push_back(j);
    67. continue;
    68. }
    69. if(arr[i]==0)
    70. {
    71. continue;
    72. }
    73. if(arr1[j]%arr[i]==0)
    74. {
    75. vec[i].push_back(j);
    76. }
    77. }
    78. }
    79.  
    80. memset(match,-1,sizeof(match));
    81.  
    82. cnt=0;
    83. for(i=1; i<=n; i++)
    84. {
    85.  
    86. memset(visit,false,sizeof(visit));
    87.  
    88. if(dfs(i))
    89. {
    90. cnt++;
    91. }
    92. }
    93.  
    94. printf("Case %lld: %lld\n",x,cnt);
    95.  
    96. for(i=0;i<=n;i++)
    97. {
    98. vec[i].clear();
    99. }
    100. }
    101. return 0;
    102. }
    103.