Advertisement
Guest User

Untitled

a guest
Apr 29th, 2016
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.88 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <cstring>
  5. #include <algorithm>
  6.  
  7. using namespace std;
  8.  
  9. #define si(a) scanf("%d",&a)
  10. #define f first
  11. #define s second
  12. #define mp(a,b) make_pair(a,b)
  13.  
  14. vector<int> graph[105];
  15. vector<int> temp,data;
  16. int link[105],vis[105],col[105];
  17.  
  18. bool dfs(int now)
  19. {
  20.     int i;
  21.     for(i=0;i<graph[now].size();i++){
  22.         int to=graph[now][i];
  23.         if(vis[to] || col[to])
  24.             continue;
  25.         vis[to]=1;
  26.         if(link[to]==-1 || dfs(link[to])){
  27.             link[to]=now;
  28.             return true;
  29.         }
  30.     }
  31.     return false;
  32. }
  33.  
  34. int matching(int n)
  35. {
  36.     int i,ret=0;
  37.     memset(link,-1,sizeof(link));
  38.     for(i=0;i<n;i++){
  39.         if(col[i])
  40.             continue;
  41.         memset(vis,0,sizeof(vis));
  42.         if(dfs(i))
  43.             ret++;
  44.     }
  45.     return ret;
  46. }
  47.  
  48. void solve(int ca)
  49. {
  50.     int n,i,x,j;
  51.     si(n);
  52.     temp.clear();
  53.     data.clear();
  54.     memset(col,0,sizeof(col));
  55.     for(i=0;i<n;i++){
  56.         si(x);
  57.         temp.push_back(x);
  58.     }
  59.     sort(temp.begin(),temp.end());
  60.     data.push_back(temp[0]);
  61.     for(i=1;i<n;i++)
  62.         if(temp[i]!=temp[i-1])
  63.             data.push_back(temp[i]);
  64.     n=data.size();
  65.     for(i=0;i<n;i++)
  66.         graph[i].clear();
  67.     for(i=0;i<n;i++){
  68.         for(j=i+1;j<n;j++){
  69.             if(data[j]%data[i]==0)
  70.                 graph[i].push_back(j);
  71.         }
  72.     }
  73.     int ans=matching(n);
  74.     for(i=n-1;i>=0;i--){
  75.         col[i]=1;
  76.         int tmp=matching(n);
  77.         if(tmp<ans){
  78.             ans=tmp;
  79.         }
  80.         else
  81.             col[i]=0;
  82.     }
  83.     printf("Case %d:",ca);
  84.     for(i=0;i<n;i++)
  85.         if(!col[i])
  86.             printf(" %d",data[i]);
  87.     printf("\n");
  88. }
  89.  
  90. int main()
  91. {
  92.     //freopen("input.txt","r",stdin);
  93.     int t;
  94.     si(t);
  95.     for(int ca=1;ca<=t;ca++)
  96.         solve(ca);
  97.     return 0;
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement