Submission #618651
Source Code Expand
#include <iostream> #include <vector> #include <queue> #include <utility> #include <functional> #include <map> using namespace std; // E[i]: vertexes which can be reased from i // W[i]: their weight template<class T> vector<T> dijkstra(vector<vector<int>> E, vector<vector<T>> W, int s, T inf) { int n = (int)E.size(); vector<T> D(n, inf); typedef pair<T,int> P; priority_queue<P,vector<P>,greater<P>> Q; D[s] = T(); Q.push(make_pair(D[s], s)); while (!Q.empty()) { int d = Q.top().first; int p = Q.top().second; Q.pop(); if (d > D[p]) continue; for (int i=0; i<(int)E[p].size(); i++) { int t = E[p][i]; if (d+W[p][i] < D[t]) D[t] = d+W[p][i], Q.push(make_pair(D[t], t)); } } return D; } int main() { int N, M, src, dst; cin>>N>>M>>src>>dst; vector<int> L(M); vector<vector<int>> s(M); vector<vector<int>> w(M); for (int i=0; i<M; i++) { cin>>L[i]; s[i] = vector<int>(L[i]); for (int j=0; j<L[i]; j++) cin>>s[i][j]; w[i] = vector<int>(L[i]-1); for (int j=0; j<L[i]-1; j++) cin>>w[i][j]; } vector<vector<int>> E(N); vector<vector<int>> W(N); for (int i=0; i<M; i++) for (int j=0; j<L[i]-1; j++) { E[s[i][j]].push_back(s[i][j+1]); W[s[i][j]].push_back(w[i][j]); E[s[i][j+1]].push_back(s[i][j]); W[s[i][j+1]].push_back(w[i][j]); } int inf = 0x40000000; vector<int> D2 = dijkstra(E, W, dst, inf); vector<vector<pair<int, int>>> V(N); for (int i=0; i<M; i++) for (int j=0; j<L[i]; j++) V[s[i][j]].push_back(make_pair(i, j)); vector<vector<int>> w0(M), w1(M); for (int i=0; i<M; i++) { w0[i] = w1[i] = vector<int>(L[i]); w0[i][0] = 0; for (int j=1; j<L[i]; j++) w0[i][j] = w0[i][j-1] + w[i][j-1]; w1[i][L[i]-1] = 0; for (int j=L[i]-2; j>=0; j--) w1[i][j] = w1[i][j+1] + w[i][j]; } auto solve = [&](int limit) { vector<int> D1(N, inf); typedef pair<int, int> P; priority_queue<P,vector<P>,greater<P>> Q; D1[src] = 0; Q.push(make_pair(0, src)); while (!Q.empty()) { int d = Q.top().first; int p = Q.top().second; Q.pop(); if (d > D1[p]) continue; for (int i=0; i<(int)V[p].size(); i++) { int a = V[p][i].first; int b = V[p][i].second; if (0<b && d+w0[a][b]+D2[s[a][0]]<=limit) { int t = s[a][b-1]; if (d+w[a][b-1]<D1[t]) D1[t] = d+w[a][b-1], Q.push(make_pair(D1[t], t)); } if (b<L[a]-1 && d+w1[a][b]+D2[s[a][L[a]-1]]<=limit) { int t = s[a][b+1]; if (d+w[a][b]<D1[t]) D1[t] = d+w[a][b], Q.push(make_pair(D1[t], t)); } } } return D1[dst]<=limit; }; int ans = 0; for (int b=inf; b>0; b/=2) if (!solve(ans+b)) ans += b; cout<<ans+1<<endl; }
Submission Info
Submission Time | |
---|---|
Task | C - メンテナンス明け |
User | kusano |
Language | C++11 (GCC 4.9.2) |
Score | 100 |
Code Size | 3018 Byte |
Status | AC |
Exec Time | 401 ms |
Memory | 7592 KB |
Judge Result
Set Name | Subtask1 | Subtask2 | ||||
---|---|---|---|---|---|---|
Score / Max Score | 50 / 50 | 50 / 50 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Subtask1 | small/00_sample00, small/00_sample01, small/00_sample02, small/10_small-0000, small/10_small-0001, small/10_small-0002, small/10_small-0003, small/10_small-0004, small/10_small-0005, small/10_small-0006, small/10_small-0007, small/10_small-0008, small/10_small-0009, small/10_small-0010, small/10_small-0011, small/10_small-0012, small/10_small-0013, small/10_small-0014, small/10_small-0015, small/10_small-0016, small/10_small-0017, small/10_small-0018, small/10_small-0019, small/30_max_small, small/40_simple_0000, small/40_simple_0001, small/40_simple_0002, small/40_simple_0003, small/40_simple_0004, small/40_simple_0005, small/40_simple_0006, small/40_simple_0007, small/40_simple_0008, small/40_simple_0009, small/40_simple_0010, small/40_simple_0011, small/40_simple_0012, small/40_simple_0013, small/40_simple_0014, small/40_simple_0015, small/40_simple_0016, small/40_simple_0017, small/40_simple_0018, small/40_simple_0019, small/90_dijkstra_killer_00, small/90_dijkstra_killer_01, small/91_tayama_killer_00, small/91_tayama_killer_01, small/91_tayama_killer_02, small/91_tayama_killer_03, small/91_tayama_killer_04, small/91_tayama_killer_05 |
Subtask2 | large/20_large-00, large/20_large-01, large/20_large-02, large/20_large-03, large/20_large-04, large/31_max_large |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
large/20_large-00 | AC | 360 ms | 7460 KB |
large/20_large-01 | AC | 368 ms | 7580 KB |
large/20_large-02 | AC | 389 ms | 7592 KB |
large/20_large-03 | AC | 386 ms | 7584 KB |
large/20_large-04 | AC | 401 ms | 7592 KB |
large/31_max_large | AC | 96 ms | 6556 KB |
small/00_sample00 | AC | 25 ms | 920 KB |
small/00_sample01 | AC | 25 ms | 924 KB |
small/00_sample02 | AC | 26 ms | 800 KB |
small/10_small-0000 | AC | 29 ms | 924 KB |
small/10_small-0001 | AC | 28 ms | 924 KB |
small/10_small-0002 | AC | 28 ms | 796 KB |
small/10_small-0003 | AC | 29 ms | 796 KB |
small/10_small-0004 | AC | 28 ms | 800 KB |
small/10_small-0005 | AC | 28 ms | 920 KB |
small/10_small-0006 | AC | 28 ms | 920 KB |
small/10_small-0007 | AC | 26 ms | 916 KB |
small/10_small-0008 | AC | 27 ms | 792 KB |
small/10_small-0009 | AC | 28 ms | 920 KB |
small/10_small-0010 | AC | 27 ms | 916 KB |
small/10_small-0011 | AC | 28 ms | 912 KB |
small/10_small-0012 | AC | 28 ms | 796 KB |
small/10_small-0013 | AC | 28 ms | 800 KB |
small/10_small-0014 | AC | 27 ms | 792 KB |
small/10_small-0015 | AC | 28 ms | 800 KB |
small/10_small-0016 | AC | 27 ms | 804 KB |
small/10_small-0017 | AC | 27 ms | 924 KB |
small/10_small-0018 | AC | 28 ms | 812 KB |
small/10_small-0019 | AC | 29 ms | 928 KB |
small/30_max_small | AC | 26 ms | 804 KB |
small/40_simple_0000 | AC | 25 ms | 800 KB |
small/40_simple_0001 | AC | 26 ms | 912 KB |
small/40_simple_0002 | AC | 25 ms | 804 KB |
small/40_simple_0003 | AC | 27 ms | 920 KB |
small/40_simple_0004 | AC | 27 ms | 796 KB |
small/40_simple_0005 | AC | 26 ms | 920 KB |
small/40_simple_0006 | AC | 26 ms | 920 KB |
small/40_simple_0007 | AC | 27 ms | 920 KB |
small/40_simple_0008 | AC | 26 ms | 756 KB |
small/40_simple_0009 | AC | 26 ms | 804 KB |
small/40_simple_0010 | AC | 27 ms | 792 KB |
small/40_simple_0011 | AC | 26 ms | 796 KB |
small/40_simple_0012 | AC | 26 ms | 916 KB |
small/40_simple_0013 | AC | 29 ms | 800 KB |
small/40_simple_0014 | AC | 27 ms | 916 KB |
small/40_simple_0015 | AC | 27 ms | 768 KB |
small/40_simple_0016 | AC | 26 ms | 920 KB |
small/40_simple_0017 | AC | 26 ms | 796 KB |
small/40_simple_0018 | AC | 25 ms | 916 KB |
small/40_simple_0019 | AC | 26 ms | 808 KB |
small/90_dijkstra_killer_00 | AC | 26 ms | 920 KB |
small/90_dijkstra_killer_01 | AC | 26 ms | 920 KB |
small/91_tayama_killer_00 | AC | 27 ms | 740 KB |
small/91_tayama_killer_01 | AC | 26 ms | 676 KB |
small/91_tayama_killer_02 | AC | 26 ms | 800 KB |
small/91_tayama_killer_03 | AC | 25 ms | 920 KB |
small/91_tayama_killer_04 | AC | 26 ms | 916 KB |
small/91_tayama_killer_05 | AC | 25 ms | 792 KB |