Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <sstream>
- #include <fstream>
- #include <iomanip>
- #include <string>
- #include <cstdlib>
- #include <cstdio>
- #include <cassert>
- #include <cstring>
- #include <cmath>
- #include <ctime>
- #include <climits>
- #include <vector>
- #include <queue>
- #include <stack>
- #include <set>
- #include <bitset>
- #include <map>
- #include <utility>
- #include <algorithm>
- #include <numeric>
- #include <functional>
- #define forn(i, n) for (int i = 0; i < int(n); i++)
- #define forl(i, n) for (int i = 1; i <= int(n); i++)
- #define ford(i, n) for (int i = int(n) - 1; i >= 0; i--)
- #define fore(i, l, r) for(int i = int(l); i <= int(r); i++)
- #define all(a) (a).begin(), (a).end()
- #define sz(a) int((a).size())
- #define pb(a) push_back(a)
- #define mp(x, y) make_pair((x), (y))
- #define ft first
- #define sc second
- #define x first
- #define y second
- using namespace std;
- template<typename X> inline X abs(const X& a) { return a < 0 ? -a : a; }
- template<typename X> inline X sqr(const X& a) { return a * a; }
- typedef long long li;
- typedef long double ld;
- typedef pair<int, int> pt;
- const int INF = int(1e9);
- const li INF64 = li(1e18);
- const ld EPS = 1e-9;
- const int N = 3000 + 3;
- int n, m, k;
- vector<int> g[N];
- inline bool read()
- {
- if (scanf("%d%d%d", &n, &m, &k) != 3) return false;
- forn(i, m)
- {
- int x, y;
- assert(scanf("%d%d", &x, &y) == 2);
- x--, y--;
- g[x].pb(y), g[y].pb(x);
- }
- return true;
- }
- int ansVal;
- int used[N];
- int perm[N];
- int CNT = 200 * 1000 * 1000;
- void solve(int idx, int curVal)
- {
- if (--CNT < 0) return;
- if (curVal > k) return;
- if (curVal >= ansVal) return;
- if (idx == n) return void(ansVal = curVal);
- int v = perm[idx];
- if (used[v]) return solve(idx + 1, curVal);
- if (sz(g[v]) <= k)
- {
- int nextVal = curVal;
- forn(j, sz(g[v]))
- {
- nextVal += !used[g[v][j]];
- used[g[v][j]]++;
- }
- solve(idx + 1, nextVal);
- forn(j, sz(g[v]))
- used[g[v][j]]--;
- }
- used[v]++;
- solve(idx + 1, curVal + 1);
- used[v]--;
- }
- inline bool cmp(int i, int j) { return sz(g[i]) > sz(g[j]); }
- inline void solve()
- {
- forn(i, n) perm[i] = i;
- sort(perm, perm + n, cmp);
- //reverse(perm, perm + n);
- //random_shuffle(perm, perm + n);
- ansVal = k + 1;
- solve(0, 0);
- if (ansVal == k + 1) puts("Impossible");
- else cout << ansVal << endl;
- }
- int main()
- {
- #ifdef SU2_PROJ
- assert(freopen("input.txt", "rt", stdin));
- //assert(freopen("output.txt", "wt", stdout));
- #endif
- assert(read());
- solve();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement