제출 #1098272

#제출 시각아이디문제언어결과실행 시간메모리
1098272EjenKronican (COCI16_kronican)C++17
100 / 100
158 ms8680 KiB
#include <bits/stdc++.h> #define el "\n" #define fu(i, a, b) for (int i = a; i <= b; ++i) #define fd(i, a, b) for (int i = a; i >= b; --i) #define ff first #define ss second #define all(v) (v).begin(), (v).end() #define sz(v) (ll)(v).size() #define mask(i) (1LL << (i)) #define bit(x, i) ((x) >> (i) & 1) using namespace std; typedef long long ll; typedef unsigned long long ull; typedef double db; mt19937_64 rng(chrono::high_resolution_clock::now().time_since_epoch().count()); ll Rand(ll l, ll r) { return uniform_int_distribution<ll>(l, r) (rng); } ll last(ll msk) {return msk & (-msk);} ll pop_cnt(ll msk) {return __builtin_popcountll(msk);} ll ctz(ll msk) {return __builtin_ctzll(msk);} ll lg(ll msk) {return 63 - __builtin_clzll(msk);} template<class T1, class T2> bool minimize(T1 &a, T2 b) { return a > b ? a = b, 1 : 0; } template<class T1, class T2> bool maximize(T1 &a, T2 b) { return a < b ? a = b, 1 : 0; } template<class T> void print(T a) { for (auto x : a) cout << x << " "; cout << el; } template<class T> void compress(T &a) { sort(all(a)); a.resize(unique(all(a)) - a.begin()); } const long long N = 2e1 + 27, mod = 1e9 + 7, inf = 2e18, bl = 320, lim = 1e6 + 27, base = 311; ll n, k, res = inf; ll a[N][N], f[mask(20)]; signed main() { // freopen("bai3.inp", "r", stdin); // freopen("bai3.out", "w", stdout); ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> k; fu(i, 1, n) fu(j, 1, n) cin >> a[i][j]; fu(d, 1, n) fu(i, 1, n) fu(j, 1, n) minimize(a[i][j], a[i][d] + a[d][j]); // cout << el; // fu(i, 1, n) { // fu(j, 1, n) cout << a[i][j] << ' '; // cout << el; // } memset(f, 0x3f, sizeof(f)); f[mask(n) - 1] = 0; fd(msk, mask(n) - 1, 0) { if (pop_cnt(msk) <= k) minimize(res, f[msk]); for (ll sub = msk; sub > 0; sub -= last(sub)) { ll i = ctz(sub); for (ll tmp = msk ^ mask(i); tmp > 0; tmp -= last(tmp)) { ll j = ctz(tmp); // cout << i << ' ' << j << el; minimize(f[msk ^ mask(i)], f[msk] + a[i + 1][j + 1]); } } // break; } cout << res; }
#Verdict Execution timeMemoryGrader output
Fetching results...