結果
| 問題 |
No.848 なかよし旅行
|
| コンテスト | |
| ユーザー |
tempura_pp
|
| 提出日時 | 2019-03-16 01:01:01 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,572 bytes |
| コンパイル時間 | 2,215 ms |
| コンパイル使用メモリ | 110,116 KB |
| 実行使用メモリ | 52,560 KB |
| 最終ジャッジ日時 | 2024-10-06 20:45:35 |
| 合計ジャッジ時間 | 8,096 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | -- * 4 |
| other | TLE * 1 -- * 25 |
ソースコード
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<iomanip>
#include<math.h>
#include<complex>
#include<queue>
#include<deque>
#include<stack>
#include<map>
#include<set>
#include<bitset>
#include<functional>
#include<assert.h>
#include<numeric>
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;
typedef pair<int,int> pint;
typedef pair<ll,int> pli;
const int inf=1e9+7;
const ll longinf=1LL<<60 ;
const ll mod=1e9+7 ;
using G=vector<vector<pair<ll,int>>>;
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);
}
vector<vector<ll>> dist(n,vector<ll>(n,longinf));
rep(i,n){
dist[i][i]=0;
priority_queue<pair<ll,int>> que;
que.emplace(0,i);
while(que.size()){
ll d=-que.top().first;
int cur=que.top().second;
que.pop();
if(d>dist[i][cur])continue;
for(auto e : v[cur]){
if(dist[i][e.second]>d+e.first){
dist[i][e.second]=d+e.first;
que.emplace(-dist[i][e.second],e.second);
}
}
}
}
rep(i,n){
rep(j,n)cout<<dist[i][j]<<" ";
cout<<endl;
}
ll ans=-1;
ll ret=dist[0][p]+dist[p][q]+dist[q][0];
if(ret<=t){
cout<<t<<endl;
return 0;
}
rep(i,n)rep(j,n){
ll ret1=dist[0][i]+dist[i][p]+dist[p][j]+dist[j][0];
ll ret2=dist[0][i]+dist[i][q]+dist[q][j]+dist[j][0];
ll ret=max(ret1,ret2);
if(ret<=t){
ans=max(ans,t-ret+dist[0][i]+dist[j][0]);
}
}
cout<<ans<<endl;
return 0;
}
tempura_pp