結果
| 問題 |
No.1 道のショートカット
|
| コンテスト | |
| ユーザー |
sewoiwataki
|
| 提出日時 | 2018-02-19 01:41:21 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 310 ms / 5,000 ms |
| コード長 | 2,439 bytes |
| コンパイル時間 | 581 ms |
| コンパイル使用メモリ | 67,880 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-20 16:34:53 |
| 合計ジャッジ時間 | 2,827 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 40 |
ソースコード
#include <iostream>
#include <vector>
#include <queue>
//#define DEBUG
#define NMAX 50
#define CMAX 300
#define VMAX 1500
typedef struct ed{
int T;
int Y;
int M;
} ED;
using namespace std;
int main(){
int N;
int C;
int V;
int S[VMAX];
int T[VMAX];
int Y[VMAX];
int M[VMAX];
int ans;
queue<int> q;
vector<ED> v[NMAX+1];
int map[NMAX+1][CMAX+1];
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++){
ED tmpS;
tmpS.T=T[i];
tmpS.Y=Y[i];
tmpS.M=M[i];
v[S[i]].push_back(tmpS);
}
#ifdef DEBUG
for(int i=1;i<=N;i++){
cout<<i<<":"<<endl;
for(int j=0;j<v[i].size();j++){
cout<<"T:"<<v[i][j].T<<" Y:"<<v[i][j].Y<<" M:"<<v[i][j].M<<endl;
}
}
#endif
for(int i=1;i<=N;i++){
for(int j=0;j<=C;j++){
map[i][j]=-1;
}
}
map[1][C]=0;
q.push(1);
while(!q.empty()){
#ifdef DEBUG
for(int i=1;i<=N;i++){
int min=-1;
for(int j=0;j<=C;j++){
if(map[i][j]!=-1){
if(min==-1||min>map[i][j]){
min=map[i][j];
}
}
}
cout<<min<<",";
}
cout<<endl;
#endif
int n=q.front();
q.pop();
for(int i=0;i<v[n].size();i++){
for(int j=0;j<=C;j++){
int diffC=j-v[n][i].Y;
if(map[n][j]!=-1&&diffC>=0){
int toM=map[v[n][i].T][diffC];
if(toM==-1||map[n][j]+v[n][i].M<toM){
#ifdef DEBUG
cout<<"n:"<<n<<" i:"<<i<<" j:"<<j<<endl;
#endif
map[v[n][i].T][diffC]=map[n][j]+v[n][i].M;
q.push(v[n][i].T);
}
}
}
}
}
ans=-1;
for(int i=0;i<=C;i++){
if(map[N][i]!=-1){
if(ans==-1||ans>map[N][i]){
ans=map[N][i];
}
}
}
cout<<ans<<endl;
}
sewoiwataki