結果
| 問題 |
No.848 なかよし旅行
|
| コンテスト | |
| ユーザー |
tempura_pp
|
| 提出日時 | 2019-03-16 05:39:55 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,213 bytes |
| コンパイル時間 | 2,016 ms |
| コンパイル使用メモリ | 178,492 KB |
| 実行使用メモリ | 13,904 KB |
| 最終ジャッジ日時 | 2024-10-06 20:48:01 |
| 合計ジャッジ時間 | 4,505 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 25 WA * 1 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
#define REP(i,m,n) for(int i=(int)(m) ; i < (int) (n) ; ++i )
#define rep(i,n) REP(i,0,n)
typedef long long ll;
const ll longinf=1LL<<60 ;
using G=vector<vector<pair<ll,int>>>;
vector<ll> bfs(int s,G v){
int n=v.size();
vector<ll> dist(n,longinf);
dist[s]=0;
priority_queue<pair<ll,int>> que;
que.emplace(0,s);
while(que.size()){
ll d=-que.top().first;
int cur=que.top().second;
que.pop();
if(d>dist[cur])continue;
for(auto e : v[cur]){
if(dist[e.second]>d+e.first){
dist[e.second]=d+e.first;
que.emplace(-dist[e.second],e.second);
}
}
}
return dist;
}
int main(){
int n,m,p,q,t;
cin>>n>>m>>p>>q>>t;
--p;--q;
G v(n);
rep(i,m){
int a,b,c;
cin>>a>>b>>c;
--a;--b;
v[a].emplace_back(c,b);
v[b].emplace_back(c,a);
}
auto dist_s=bfs(0,v);
auto dist_p=bfs(p,v);
auto dist_q=bfs(q,v);
ll ans=-1;
ll ret=dist_s[p]+dist_p[q]+dist_q[0];
if(ret<t){
cout<<t<<endl;
return 0;
}
rep(i,n)rep(j,n){
ll ret1=dist_s[i]+dist_p[i]+dist_p[j]+dist_s[j];
ll ret2=dist_s[i]+dist_q[i]+dist_q[j]+dist_s[j];
ll ret=max(ret1,ret2);
if(ret<=t){
ans=max(ans,t-ret+dist_s[i]+dist_s[j]);
}
}
cout<<ans<<endl;
return 0;
}
tempura_pp