Submission #492867

#TimeUsernameProblemLanguageResultExecution timeMemory
492867LastRoninCities (BOI16_cities)C++14
51 / 100
6041 ms187176 KiB
#pragma GCC optimize("O3") #pragma GCC target("popcnt") #include <bits/stdc++.h> #define pb push_back #define ll long long #define ull unsigned long long #define mp make_pair #define si short int #define speed ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0) #define pill pair<ll,ll> #define f first #define s second #define pilc pair<ll,char> #define all(a) (a).begin(),(a).end() #define rep(s,e,step) for(int i = (s); i < (e) ; i += step) #define vrep(s,e,step) for(int j = (s); j < (e) ; j += step) #define ex exit(0) #define triple pair<pill, ll> #define pinode pair<node*, node*> #define quadra pair<pill, pill> #define ld double #define pild pair<double,double> using namespace std; const ll N = 1e5 + 11; const ll M = 32; const ll mod = 998244353; mt19937_64 bruh(chrono::steady_clock::now().time_since_epoch().count()); ll n, m, k; ll dp[N][M]; set<pair<ll, pill>> pd; vector<pill> g[N]; ll x[N]; int main() { speed; cin >> n >> k >> m; for(int i = 0; i < k; i++) cin >> x[i]; for(int i = 1; i <= m; i++) { ll a, b, c; cin >> a >> b >> c; g[a].pb(mp(b, c)); g[b].pb(mp(a, c)); } for(int i = 1; i <= n; i++) { for(int j = 1; j < (1<<k); j++) dp[i][j] = 1e17; pd.insert(mp(0, mp(i, 0))); } for(int i = 0; i < k; i++) { dp[x[i]][1<<i] = 0; pd.insert(mp(0, mp(x[i], 1<<i))); } while(pd.size()) { pill v = (*pd.begin()).s; pd.erase(pd.begin()); for(auto u : g[v.f]) { for(int msk = 0; msk < (1<<k); msk++) { if(!(msk&v.s)) { if(dp[u.f][msk|v.s] > dp[u.f][msk] + u.s + dp[v.f][v.s]) { if(dp[u.f][msk|v.s] != 1e17) pd.erase(mp(dp[u.f][msk|v.s], mp(u.f, msk|v.s))); dp[u.f][msk|v.s] = dp[u.f][msk] + u.s + dp[v.f][v.s]; pd.insert(mp(dp[u.f][msk|v.s], mp(u.f, msk | v.s))); } } } } } ll ans = 1e17; for(int i = 1; i <= n; i++) ans = min(ans, dp[i][(1<<k) - 1]); cout << ans; } /* 5 3 1 1 2 4 7 11 5 7 10 1 3 2 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...