Submission #445807

#TimeUsernameProblemLanguageResultExecution timeMemory
445807nickmet2004Cities (BOI16_cities)C++11
100 / 100
1244 ms39508 KiB
#include<bits/stdc++.h> #define int long long using namespace std; const int N = 2e5 + 5; int n , k , m , A[6]; int d[6][N] , F[6][6][N] , v[N]; vector<pair<int , int>> adj[N]; void go(int a , int b , int *ans){ priority_queue<pair<int , int> > pq; for(int y = 1; y <= n; ++y) { if(b!=0) ans[y] = d[a][y] + d[b][y], pq.push({-ans[y] , y}); else ans[y] = 1e18; } if(b==0)pq.push({0 , a}) , ans[a] = 0; int u , w; while(pq.size()){ auto T = pq.top(); pq.pop(); u = T.second , w = -T.first; if(v[u])continue; v[u]= 1; int v , D; for(auto V : adj[u]){ v = V.first , D = V.second; if(ans[v] > D + w){ans[v] = D + w; pq.push({-ans[v] , v});} } } memset(v , 0 , sizeof(v)); } main (){ ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> k >> m; for(int i = 0; i< k; ++i)cin >> A[i]; int u , v , w; for(int i = 1; i<= m; ++i){ cin >> u >> v >> w; adj[u].emplace_back(v , w); adj[v].emplace_back(u , w); } for(int i = 0; i < k; ++i) go(A[i] , 0 , d[i]); for(int i = 0; i< k; ++i){ for(int j = i + 1; j < k; ++j){ go(i , j , F[i][j]); //for(int x =1; x <= n; ++x)cout << i << " "<< j << " " << x << " " << F[i][j][x] << endl; } } /* for(int i = 0; i< k; ++i){ for(int x= 1; x <= n; ++x)cout << d[i][x] << " "; cout << endl; } */ if(k == 2)cout << d[0][A[1]]<<endl; if(k == 3)cout << F[0][1][A[2]] << endl; int ans = 1e18; if(k == 4){ vector<int> P = {0 , 1, 2, 3}; do{ if(P[0] > P[1] || P[2] > P[3])continue; for(int i = 1; i<= n; ++i)ans = min(ans , F[P[0]][P[1]][i] + F[P[2]][P[3]][i]); }while(next_permutation(P.begin(), P.end())); cout << ans; } if(k == 5){ vector<int> P = {0 ,1 , 2, 3 , 4}; do{ if(P[0] > P[1] || P[2] > P[3])continue; for(int i = 1; i<= n; ++i)ans = min(ans , F[P[0]][P[1]][i] + F[P[2]][P[3]][i] + d[P[4]][i]); }while(next_permutation(P.begin() , P.end())); cout << ans; } }

Compilation message (stderr)

cities.cpp:30:2: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   30 |  main (){
      |  ^~~~
#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...