結果
| 問題 |
No.1 道のショートカット
|
| コンテスト | |
| ユーザー |
shisyamokongari
|
| 提出日時 | 2016-08-20 22:54:23 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 4 ms / 5,000 ms |
| コード長 | 1,286 bytes |
| コンパイル時間 | 544 ms |
| コンパイル使用メモリ | 67,472 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-20 16:24:45 |
| 合計ジャッジ時間 | 1,553 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 40 |
ソースコード
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
#define VMAX 1500
#define CMAX 300
#define NMAX 50
typedef struct S{
int T,Y,M;
} s;
typedef struct S2{
int C,ed;
} s2;
int main(){
int N,C,V;
int S[VMAX],T[VMAX],Y[VMAX],M[VMAX];
vector<s> vs[NMAX+1];
int ansmap[NMAX+1][CMAX+1];
queue<s2> qs;
cin>>N;
cin>>C;
cin>>V;
for(int i=0;i<V;i++) cin>>S[i];
for(int i=0;i<V;i++) cin>>T[i];
for(int i=0;i<V;i++) cin>>Y[i];
for(int i=0;i<V;i++) cin>>M[i];
for(int i=0;i<V;i++){
s stmp;
stmp.T=T[i];
stmp.Y=Y[i];
stmp.M=M[i];
vs[S[i]].push_back(stmp);
}
for(int i=1;i<=N;i++){
for(int j=0;j<=C;j++){
ansmap[i][j]=-1;
}
}
ansmap[1][C]=0;
s2 stmp2;
stmp2.C=C;
stmp2.ed=1;
qs.push(stmp2);
while(!qs.empty()){
int nC,nS,nM;
nC=qs.front().C;
nS=qs.front().ed;
qs.pop();
nM=ansmap[nS][nC];
for(int i=0;i<vs[nS].size();i++){
int vM=vs[nS][i].M;
int vT=vs[nS][i].T;
int vY=vs[nS][i].Y;
if(nC-vY>=0){
int yM=ansmap[vT][nC-vY];
if(yM==-1||yM>nM+vM){
ansmap[vT][nC-vY]=nM+vM;
stmp2.C=nC-vY;
stmp2.ed=vT;
qs.push(stmp2);
}
}
}
}
int ans=-1;
for(int i=0;i<=C;i++){
if(ansmap[N][i]!=-1){
if(ans==-1||ansmap[N][i]<ans) ans=ansmap[N][i];
}
}
cout<<ans<<endl;
}
shisyamokongari