結果
| 問題 |
No.788 トラックの移動
|
| コンテスト | |
| ユーザー |
mtsd
|
| 提出日時 | 2019-02-08 22:07:14 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,087 bytes |
| コンパイル時間 | 930 ms |
| コンパイル使用メモリ | 96,136 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-07-01 11:32:39 |
| 合計ジャッジ時間 | 3,986 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 12 WA * 2 |
ソースコード
#include <iostream>
#include <vector>
#include <string>
#include <cmath>
#include <algorithm>
#include <utility>
#include <queue>
#include <set>
#include <map>
#include <deque>
#include <iomanip>
#include <cstdio>
#include <stack>
#include <numeric>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
typedef vector<int> VI;
typedef vector<VI> VVI;
#define MP make_pair
#define PB push_back
#define inf 1e+16
#define rep(i,n) for(int i=0;i<(int)(n);++i)
vector<vector<pair<ll,int> > > g;
int main(){
int n,m,s;
cin >> n >> m >> s;
vector<ll> dd(n,inf);
vector<ll> t(n);
rep(i,n)cin >> t[i];
s--;
g.resize(n);
rep(i,m){
int a,b,c;
cin >> a >> b >> c;
a--;b--;
g[a].push_back(MP(c,b));
g[b].push_back(MP(c,a));
}
dd[s] = 0;
priority_queue<pair<ll,int>,vector<pair<ll,int> >,greater<pair<ll,int> > >pq;
pq.push(MP(0,s));
while(!pq.empty()){
auto x = pq.top();
pq.pop();
if(dd[x.second]!=x.first)continue;
for(auto y:g[x.second]){
if(dd[y.second]>dd[x.second]+y.first){
dd[y.second] = dd[x.second]+y.first;
pq.push(MP(dd[y.second],y.second));
}
}
}
ll ans = inf;
for(int i=0;i<n;i++){
pq.push(MP(0,i));
vector<ll> d(n,inf);
d[i] = 0;
while(!pq.empty()){
auto x = pq.top();
pq.pop();
if(d[x.second]!=x.first)continue;
for(auto y:g[x.second]){
if(d[y.second]>d[x.second]+y.first){
d[y.second] = d[x.second]+y.first;
pq.push(MP(d[y.second],y.second));
}
}
}
ll tmp = 0;
rep(j,n){
tmp += 2*d[j]*t[j];
}
ll ma = -inf;
rep(j,n){
if(t[j]>0){
ma = max(ma,d[j]-dd[j]);
}
}
tmp -= ma;
//cerr << tmp << endl;
ans = min(ans,tmp);
}
cout << ans << endl;
return 0;
}
mtsd