Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <string>
- #include <cmath>
- #include <algorithm>
- #include <ctime>
- #include <vector>
- #include <queue>
- #include <stack>
- #include <map>
- #include <set>
- #include <functional>
- #include <numeric>
- #define f first
- #define s second
- #define ll long long
- #define mp make_pair
- #define pb push_back
- #define pii pair < int, int >
- #define pll pair < long long, long long >
- #define forit(it,S) for(typeof(S.begin()) it = S.begin(); it!= S.end(); it++)
- using namespace std;
- int const maxn = (int)2e2 + 111;
- int const inf = (1<<30) - 1;
- int n;
- int a[maxn];
- int cc;
- int used[maxn], mt[maxn];
- bool vis[maxn];
- vector < int > g[maxn];
- bool try_kuhn(int v){
- if ( used[v] == cc ) return false;
- used[v] = cc;
- for (int i=0;i<g[v].size();i++){
- int to = g[v][i];
- if ( vis[to] ) continue;
- if ( mt[to] == -1 || try_kuhn(mt[to]) ){
- mt[to] = v;
- return true;
- }
- }
- return false;
- }
- int match(int x){
- memset(mt, -1, sizeof(mt));
- memset(used, 0, sizeof(used));
- int ans = 0;
- cc = 1;
- for (int i=0;i<n;i++){
- if ( vis[i] ) continue;
- cc++;
- ans += try_kuhn(i);
- }
- return x - ans;
- }
- void Solve(){
- scanf("%d", &n);
- for (int i=0;i<n;i++){
- scanf("%d", a + i);
- }
- sort(a, a + n);
- for (int i=0;i<n;i++){
- g[i].clear();
- for (int j=i+1;j<n;j++){
- if ( a[j]%a[i] == 0){
- g[i].pb(j);
- }
- }
- }
- memset(vis, 0, sizeof(vis));
- int matching = match(n);
- set < int > S;
- for (int i=0;i<n;i++){
- memset(vis, 0, sizeof(vis));
- for (int j=0;j<g[i].size();j++){
- int to = g[i][j];
- vis[to] = true;
- }
- vis[i] = true;
- if ( match(n-1-(int)g[i].size()) == matching-1 ){
- S.insert(a[i]);
- if ( (int)S.size() == matching )break;
- }
- }
- forit(it, S){
- int x = *it;
- cout <<x<<" ";
- }
- cout <<endl;
- }
- int main (){
- #ifdef LOCAL
- freopen ("input.txt", "r", stdin);
- freopen ("output.txt", "w", stdout);
- #endif
- int tests;
- scanf("%d", &tests);
- for (int i=0;i<tests;i++){
- printf("Case %d: ", i + 1);
- Solve();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement