結果
| 問題 |
No.1 道のショートカット
|
| コンテスト | |
| ユーザー |
ohuton_labo
|
| 提出日時 | 2014-12-23 23:18:21 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,576 bytes |
| コンパイル時間 | 757 ms |
| コンパイル使用メモリ | 76,596 KB |
| 実行使用メモリ | 6,528 KB |
| 最終ジャッジ日時 | 2024-07-08 03:39:32 |
| 合計ジャッジ時間 | 1,976 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 18 WA * 22 |
ソースコード
#include <iostream>
#include <stack>
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
int max(int a,int b){
if(a>=b)return a;
else return b;
}
void swap(int *a,int *b){
int tmp = *a;
*a = *b;
*b = tmp;
}
void babbleSort(int *data,int n){
for(int i=0;i<n;i++){
for(int j=n-1;j>i;j--){
if(data[j]>=data[j-1]){
swap(&data[j],&data[j-1]);
}
}
}
}
using namespace std;
/*
cin.ignore();
getline(cin,dataStr);
data = new int[n];
stringToInteger(&dataStr,data,n);
*/
void stringToInteger(string *str,int *data,int n){
for(int i=0;i<n;i++){
int spaceN = str->find(' ',0);
data[i] = atoi(str->substr(0,spaceN).c_str());
str->erase(0,spaceN+1);
}
}
int dp[51][51][301];//data[i][j][k] i:iから jに向かう時の k総コスト
int cost[51][51];//始点から終点にいくためのコスト
int main(){
int n,c,v;
int *flag;
cin>>n;
cin>>c;
cin>>v;
flag=new int[51];
for(int i=0;i<51;i++){
flag[i]=0;
}
int *s,*t,*y,*m;
s = new int[v];
t = new int[v];
y = new int[v];
m = new int[v];
string str;
cin.ignore();
getline(cin,str);
stringToInteger(&str,s,v);
getline(cin,str);
stringToInteger(&str,t,v);
getline(cin,str);
stringToInteger(&str,y,v);
getline(cin,str);
stringToInteger(&str,m,v);
vector<int> *data;
data = new vector<int>[n+1];
for(int i=0;i<51;i++){
for(int j=0;j<51;j++){
for(int k=0;k<301;k++){
dp[i][j][k]=-1;
}
}
}
for(int i=0;i<v;i++){
dp[s[i]][t[i]][y[i]]=m[i];
cost[s[i]][t[i]]=y[i];
data[s[i]].push_back(t[i]);
}
for(int i=1;i<=n;i++){
data[i].push_back(1);
}
queue<int> q;
for(int i=0;i<data[1].size();i++){
q.push(data[1].at(i));
}
while(q.size()!=0){
int top=q.front();
//cout<<"top="<<top<<endl;
q.pop();
for(int i=0;i<data[top].size()-1;i++){
if(data[top].at(i)==1)continue;
if(flag[data[top].at(i)]==0){
q.push(data[top].at(i));
flag[data[top].at(i)]=1;
}
for(int j=0;j<=c;j++){
if(dp[1][top][j]>0&&j+cost[top][data[top].at(i)]<=c){
int tmp = dp[1][top][j]+dp[top][data[top].at(i)][cost[top][data[top].at(i)]];
if(dp[1][data[top].at(i)][j+cost[top][data[top].at(i)]]==-1||
dp[1][data[top].at(i)][j+cost[top][data[top].at(i)]]>=tmp){
dp[1][data[top].at(i)][j+cost[top][data[top].at(i)]]=tmp;
}
}
}
}
}
int min1=10000000;
for(int i=0;i<=c;i++){
if(min1>=dp[1][n][i]&&dp[1][n][i]>-1)min1 = dp[1][n][i];
}
if(min1==10000000){
cout<<-1<<endl;
}
else{
cout<<min1<<endl;
}
return 0;
}
ohuton_labo