結果
問題 | No.788 トラックの移動 |
ユーザー |
![]() |
提出日時 | 2024-10-06 19:00:27 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 488 ms / 2,000 ms |
コード長 | 1,732 bytes |
コンパイル時間 | 1,365 ms |
コンパイル使用メモリ | 116,208 KB |
実行使用メモリ | 34,816 KB |
最終ジャッジ日時 | 2024-10-06 19:00:32 |
合計ジャッジ時間 | 5,062 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 14 |
ソースコード
#include<iostream>#include<vector>#include<algorithm>using namespace std;using ll = long long;#include<queue>int main(){cin.tie(nullptr);ios::sync_with_stdio(false);ll n,m,l;cin>>n>>m>>l;vector<ll> t(n);for(int i = 0;i<n;i++) cin>>t[i];{int cnt = 0;for(int i = 0;i<n;i++) if(t[i]!=0) cnt++;if(cnt==1){cout<<0<<endl;return 0;}}vector<vector<pair<ll,ll>>> g(n);for(int i = 0;i<m;i++){ll u,v,c;cin>>u>>v>>c;u--;v--;g[u].push_back(make_pair(v,c));g[v].push_back(make_pair(u,c));}ll ans = 1e18;l--;vector<vector<ll>> dis(n,vector<ll>(n,1e18));for(int i = 0;i<n;i++){dis[i][i] = 0;using dat = pair<ll,ll>;priority_queue<dat,vector<dat>,greater<dat>> que;que.push({0,i});while(que.size()){auto now = que.top();que.pop();int ni = now.second;if(dis[i][ni]!=now.first) continue;for(auto itr:g[ni]){int to = itr.first;ll cost = dis[i][ni] + itr.second;if(dis[i][to]<=cost) continue;dis[i][to] = cost;que.push(make_pair(cost,to));}}}for(int i = 0;i<n;i++){ll sum = 0;for(int j = 0;j<n;j++) {sum += 2 * dis[i][j] * t[j];}ans = min(ans,sum+dis[i][l]);for(int j = 0;j<n;j++){if(t[j]==0) continue;ll now = sum + dis[l][j] + dis[j][i];now -= 2 * dis[i][j];ans = min(ans,now);}}cout<<ans<<endl;}