Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include <vector>
- #include <cstring>
- #include <algorithm>
- using namespace std;
- #define si(a) scanf("%d",&a)
- #define f first
- #define s second
- #define mp(a,b) make_pair(a,b)
- vector<int> graph[105];
- vector<int> temp,data;
- int link[105],vis[105],col[105];
- bool dfs(int now)
- {
- int i;
- for(i=0;i<graph[now].size();i++){
- int to=graph[now][i];
- if(vis[to] || col[to])
- continue;
- vis[to]=1;
- if(link[to]==-1 || dfs(link[to])){
- link[to]=now;
- return true;
- }
- }
- return false;
- }
- int matching(int n)
- {
- int i,ret=0;
- memset(link,-1,sizeof(link));
- for(i=0;i<n;i++){
- if(col[i])
- continue;
- memset(vis,0,sizeof(vis));
- if(dfs(i))
- ret++;
- }
- return ret;
- }
- void solve(int ca)
- {
- int n,i,x,j;
- si(n);
- temp.clear();
- data.clear();
- memset(col,0,sizeof(col));
- for(i=0;i<n;i++){
- si(x);
- temp.push_back(x);
- }
- sort(temp.begin(),temp.end());
- data.push_back(temp[0]);
- for(i=1;i<n;i++)
- if(temp[i]!=temp[i-1])
- data.push_back(temp[i]);
- n=data.size();
- for(i=0;i<n;i++)
- graph[i].clear();
- for(i=0;i<n;i++){
- for(j=i+1;j<n;j++){
- if(data[j]%data[i]==0)
- graph[i].push_back(j);
- }
- }
- int ans=matching(n);
- for(i=n-1;i>=0;i--){
- col[i]=1;
- int tmp=matching(n);
- if(tmp<ans){
- ans=tmp;
- }
- else
- col[i]=0;
- }
- printf("Case %d:",ca);
- for(i=0;i<n;i++)
- if(!col[i])
- printf(" %d",data[i]);
- printf("\n");
- }
- int main()
- {
- //freopen("input.txt","r",stdin);
- int t;
- si(t);
- for(int ca=1;ca<=t;ca++)
- solve(ca);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement