Submission #408890

#TimeUsernameProblemLanguageResultExecution timeMemory
408890Vladth11Cities (BOI16_cities)C++14
Compilation error
0 ms0 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define debug(x) cerr << #x << " " << x << "\n" #pragma GCC optimize("Ofast,unroll-loops") #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") #define debugs(x) cerr << #x << " " << x << " " //#include"holiday.h" using namespace std; using namespace __gnu_pbds; typedef long long ll; typedef pair <ll, ll> pii; typedef pair <long double, pii> muchie; typedef tree <ll, null_type, less_equal <ll>, rb_tree_tag, tree_order_statistics_node_update> OST; const ll NMAX = 100001; const ll INF = (1LL << 60); const ll HALF = (1LL << 59); const ll MOD = 666013; const ll BLOCK = 225; const ll base = 31; const ll nr_of_bits = 21; vector <pii> v[NMAX]; ll n, k, m; struct ura { ll a, b, c; }; vector <ura> edges; ll scor = 0; ll viz[NMAX]; bool cmp(ura a, ura b) { return a.c < b.c; } void add_Edge(ll a, ll b, ll c) { edges.push_back({a, b, c}); } ll d[NMAX][5]; ll dp[(1 << 5)][NMAX]; ll imp[NMAX]; ll special[NMAX]; void dijkstra(ll ind) { priority_queue <pii> pq; pq.push({0, imp[ind]}); for(ll i = 0; i <= n; i++) { viz[i] = 0; } d[imp[ind]][ind] = 0; while(pq.size()) { pii node = pq.top(); ll city = node.second; pq.pop(); if(viz[city]) continue; viz[city] = 1; for(auto x : v[city]) { if(d[city][ind] + x.second < d[x.first][ind]) { d[x.first][ind] = d[city][ind] + x.second; pq.push({-d[x.first][ind], x.first}); } } } } ll main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> k >> m; priority_queue <pii> pq; for(ll i = 1; i <= n; i++) { for(ll t = 0; t < k; t++) d[i][t] = INF; } for(ll i = 1; i <= k; i++) { ll x; cin >> x; special[x] = i; imp[i - 1] = x; } for(ll i = 1; i <= m; i++) { ll a, b, c; cin >> a >> b >> c; v[a].push_back({b, c}); v[b].push_back({a, c}); } for(ll i = 0; i < k; i++) { dijkstra(i); } for(ll mask = 0; mask < (1 << k); mask++) { for(ll i = 0; i <= n; i++) dp[mask][i] = HALF; } for(ll i = 1; i <= k; i++) { dp[(1 << (i - 1))][imp[i - 1]] = 0; } for(ll i = 1; i <= n; i++) dp[0][i] = 0; for(ll mask = 0; mask < (1 << k); mask++) { for(ll i = 1; i <= n; i++) { for(ll submask = mask; submask > 0; submask = (submask - 1) & mask) { if(special[i]) { if(!(mask & (1 << (i - 1))) || !(submask & (1 << (i - 1)))) continue; } ll newmask = (mask ^ submask); if(special[i]){ newmask ^= (1 << (special[i] - 1)); } dp[mask][i] = min(dp[mask][i], dp[submask][i] + dp[newmask][i]); } } for(ll i = 1; i <= n; i++) { for(ll j = 0; j < k; j++) { if(special[i] && (i == imp[j] || !(mask & (1 << i)))) continue; if(!(mask & (1 << j))) continue; dp[mask][i] = min(dp[mask][i], dp[(mask ^ (1 << j))][i] + d[i][j]); } } } ll sol = INF; for(ll i = 1; i <= n; i++) { sol = min(sol, dp[(1 << k) - 1][i]); } cout << sol; return 0; }

Compilation message (stderr)

cities.cpp:71:1: error: '::main' must return 'int'
   71 | ll main() {
      | ^~