結果

問題 No.1 道のショートカット
ユーザー log_Klog_K
提出日時 2019-07-23 22:34:18
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
MLE  
実行時間 -
コード長 3,809 bytes
コンパイル時間 1,837 ms
コンパイル使用メモリ 184,488 KB
実行使用メモリ 814,352 KB
最終ジャッジ日時 2023-09-22 13:33:08
合計ジャッジ時間 5,569 ms
ジャッジサーバーID
(参考情報)
judge13 / judge11
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
4,376 KB
testcase_01 AC 1 ms
4,380 KB
testcase_02 AC 1 ms
4,380 KB
testcase_03 AC 2 ms
4,376 KB
testcase_04 AC 2 ms
4,376 KB
testcase_05 AC 2 ms
4,380 KB
testcase_06 AC 1 ms
4,380 KB
testcase_07 AC 2 ms
4,376 KB
testcase_08 AC 3 ms
4,380 KB
testcase_09 AC 2 ms
4,376 KB
testcase_10 AC 3 ms
4,376 KB
testcase_11 MLE -
testcase_12 -- -
testcase_13 -- -
testcase_14 -- -
testcase_15 -- -
testcase_16 -- -
testcase_17 -- -
testcase_18 -- -
testcase_19 -- -
testcase_20 -- -
testcase_21 -- -
testcase_22 -- -
testcase_23 -- -
testcase_24 -- -
testcase_25 -- -
testcase_26 -- -
testcase_27 -- -
testcase_28 -- -
testcase_29 -- -
testcase_30 -- -
testcase_31 -- -
testcase_32 -- -
testcase_33 -- -
testcase_34 -- -
testcase_35 -- -
testcase_36 -- -
testcase_37 -- -
testcase_38 -- -
testcase_39 -- -
testcase_40 -- -
testcase_41 -- -
testcase_42 -- -
testcase_43 -- -
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
//#include <rng_58>
//#include <chokudai>
//#include <tourist>
using namespace std;

// Macro and Macro Functions
#define rep(a, b) for(int a = 0; a < b; ++a)
#define REP(a, b, c) for(int a = b; a < c; ++a)
#define drep(a, b, c) for(int a=0,b=0;b<c?:(b=0,++a<c);++b)
#define int long long
#define between(n,_min,_max) if(_min<=n&&n<=_max)
#define SORT(a) sort(ALL(a))
#define RSORT(a) sort(RALL(a))
#define REVERSE(a) reverse(ALL(a))
#define MOD 1000000007
#define Beg(a) (a).begin()
#define End(a) (a).end()
#define ALL(a) (a).begin(),(a).end()
#define RALL(a) (a).rbegin(),(a).rend()
#define ALLIN(a) rep(nanika,a.size()) cin>>a[nanika]
#define ALLINDE(a) rep(kyawa,a.size()){cin>>a[kyawa]; --a[kyawa];}
#define YN(a) do{if(a) cout<<"YES"; else cout<<"NO";}while(0)
#define Yn(a) do{if(a) cout<<"Yes"; else cout<<"No";}while(0)
#define yn(a) do{if(a) cout<<"yes"; else cout<<"no";}while(0)
#define spa " "
#define dspa "  "
#define ctoi(c) (c)-'0'
#define altoi(a) (a)-'a'
#define fi first
#define se second
#define dvec(type,name,row,column,value) vector<vector<type>> name(row,vector<type>(column,value))
 
// List of using
using ll   = signed long long;
using ull  = unsigned long long;
using pint = pair<int,  int>;
using pong = pair<long, long>;
using tint = tuple<int,  int,  int>;
using tong = tuple<long, long, long>;
using vint = vector<int>;
using vll  = vector<long long>;
using vbol = vector<bool>;
using vstr = vector<string>;
using vull = vector<unsigned long long>;
using dvin = vector<vector<int>>;
using dvbo = vector<vector<bool>>;
using mint = map<int,int>;
 
// Common Variable
bool DEBUG=false;
unsigned long long INF=(1<<31);

void print(){
  cout<<'\n';
}

template<class HEAD,class... TAIL>
void print(HEAD&& head,TAIL&&... tail){
  cout<<head<<spa;
  print(forward<TAIL>(tail)...);
}

template<class HEAD,class... TAIL>
void dprint(HEAD&& head,TAIL&&... tail){
  cout<<"Debug : "<<head<<spa;
  print(forward<TAIL>(tail)...);
}

void scan(){}

template<class HEAD,class... TAIL>
void scan(HEAD&& head,TAIL&&... tail){
  cin>>head;
  scan(forward<TAIL>(tail)...);
}

template<typename t>
void print(vector<t> &v){
  rep(i,v.size()){
    cout<<v[i]<<spa;
  }
  cout<<endl;
}

template<typename t, typename u>
void print(vector<pair<t,u>> &v){
  rep(i,v.size()){
    cout<<i<<" : "<<v[i].first<<" "<<v[i].second<<endl;
  }
}

int RepeatSquaring(int N, int P, int M){
  if(P==0) return 1;
  if(P%2==0){
    int t = RepeatSquaring(N, P/2, M);
    return t*t % M;
  }
  return N * RepeatSquaring(N, P-1, M);
}
//--------------------------------
// Template Place
template<typename T>
struct edge{int to; T cost,tt;};

template<typename T>
class Graph{
  public :
  int size;
  vector<vector<edge<T>>> Graph;
  vector<T> dis;
  vector<T> prev;
  vector<vector<T>> Tdis;
    
  void init(int n){
    size=n;
    Graph.resize(size);
    dis.resize(size);
    prev.resize(size);
  }
  void add(int x,int y,T z,T zz){
    Graph[x].emplace_back((edge<T>){y,z,zz});
  }
};
//--------------------------------
// int dx[]={ 1, 0,-1, 0};
// int dy[]={ 0,-1, 0, 1};

signed main(){
  int n,c,v; cin>>n>>c>>v;
  vint s(v),t(v),y(v),m(v);
  ALLINDE(s); ALLINDE(t); ALLIN(y); ALLIN(m);
  Graph<int> gr; gr.init(n);
  rep(i,v){
    gr.add(s[i],t[i],y[i],m[i]);
  }
  // 現在位置、現在の必要経費、現在の経過時間
  queue<tint> q;
  int ans=(1<<30);
  q.emplace(0,0,0);
  while(!q.empty()){
    int tp,tc,tt; tie(tp,tc,tt)=q.front(); q.pop();
    //print(tp+1,tc,tt);
    if(tp==n-1){
      ans=min(ans,tt);
      continue;
    }
    rep(i,gr.Graph[tp].size()){
      if(tc+gr.Graph[tp][i].cost>c) continue;
      q.emplace(gr.Graph[tp][i].to,tc+gr.Graph[tp][i].cost,tt+gr.Graph[tp][i].tt);
    }
  }
  if(ans==(1<<30)) cout<<-1<<endl;
  else cout<<ans<<endl;
}
0