#include<bits/stdc++.h> #define fi first #define se second #define pb push_back using namespace std; int n, m, k, tab[1009][1009], czary[1009], suma[1009], czas[1009], col[1009]; vector<int> wyn, ind; int check(int x, int cnt, int s) { if(cnt > k) return k+1; int wyn = k+1, a, b; if(cnt > 0) { for(int i=1; i<=k; i++) { if(s > m - czary[i]) { wyn = min(wyn, i + cnt - 1); break; } } } if(x > n) return wyn; a = check(x+1, cnt, s); s += suma[x]; for(int i=0; i<ind.size(); i++) s -= tab[x][ind[i]]; col[x] = 1; ind.pb(x); b = check(x+1, cnt+1, s); col[x] = 0; ind.pop_back(); czas[x] = min(czas[x], b); wyn = min(wyn, min(a, b)); return wyn; } void solve() { int a, b; cin>>n>>m>>k; wyn.clear(); for(int i=1; i<=n; i++) for(int j=1; j<=i; j++) tab[i][j] = tab[j][i] = 0; for(int i=1; i<=n; i++) suma[i] = 0; for(int i=1; i<=n; i++) czas[i] = k+1; for(int i=1; i<=m; i++) { cin>>a>>b; tab[a][b]++; tab[b][a]++; suma[a]++; suma[b]++; } czary[1] = 1; for(int i=2; i<=k; i++) { czary[i] = czary[i-1]; while(czary[i-1] * n > czary[i] * (n-2)) czary[i]++; } check(1, 0, 0); a = k+1; for(int i=1; i<=n; i++) a = min(a, czas[i]); if(a == k+1) cout<<"-1\n"; else { for(int i=1; i<=n; i++) if(czas[i] == a) wyn.pb(i); cout<<a<<" "<<wyn.size()<<"\n"; for(int i=0; i<wyn.size(); i++) cout<<wyn[i]<<" "; cout<<"\n"; } return; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int t; cin>>t; while(t--) solve(); return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | #include<bits/stdc++.h> #define fi first #define se second #define pb push_back using namespace std; int n, m, k, tab[1009][1009], czary[1009], suma[1009], czas[1009], col[1009]; vector<int> wyn, ind; int check(int x, int cnt, int s) { if(cnt > k) return k+1; int wyn = k+1, a, b; if(cnt > 0) { for(int i=1; i<=k; i++) { if(s > m - czary[i]) { wyn = min(wyn, i + cnt - 1); break; } } } if(x > n) return wyn; a = check(x+1, cnt, s); s += suma[x]; for(int i=0; i<ind.size(); i++) s -= tab[x][ind[i]]; col[x] = 1; ind.pb(x); b = check(x+1, cnt+1, s); col[x] = 0; ind.pop_back(); czas[x] = min(czas[x], b); wyn = min(wyn, min(a, b)); return wyn; } void solve() { int a, b; cin>>n>>m>>k; wyn.clear(); for(int i=1; i<=n; i++) for(int j=1; j<=i; j++) tab[i][j] = tab[j][i] = 0; for(int i=1; i<=n; i++) suma[i] = 0; for(int i=1; i<=n; i++) czas[i] = k+1; for(int i=1; i<=m; i++) { cin>>a>>b; tab[a][b]++; tab[b][a]++; suma[a]++; suma[b]++; } czary[1] = 1; for(int i=2; i<=k; i++) { czary[i] = czary[i-1]; while(czary[i-1] * n > czary[i] * (n-2)) czary[i]++; } check(1, 0, 0); a = k+1; for(int i=1; i<=n; i++) a = min(a, czas[i]); if(a == k+1) cout<<"-1\n"; else { for(int i=1; i<=n; i++) if(czas[i] == a) wyn.pb(i); cout<<a<<" "<<wyn.size()<<"\n"; for(int i=0; i<wyn.size(); i++) cout<<wyn[i]<<" "; cout<<"\n"; } return; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int t; cin>>t; while(t--) solve(); return 0; } |