Submission #617506
Source Code Expand
#include "bits/stdc++.h" #include<unordered_map> #pragma warning(disable:4996) using namespace std; const int My_Inf=2147483647; const long long int My_LInf=9223372036854775807; struct edge { int from; int to; int fin; long long int fincost; long long int cost; }; struct aa { bool slept; long long int time; int now; }; class Compare { public: //aaが昇順に並ぶ bool operator()(const aa&l, const aa&r) { return l.time> r.time; } }; long long int perftime[30000]; int N, M, S, D; bool check(long long int atime, const vector<vector<edge>>&edges) { priority_queue<aa, vector<aa>, Compare>que; que.push(aa{ false,0,S }); long long int mintime[30000]; for (int i = 0; i < 30000; ++i) { mintime[i] = My_LInf; } mintime[S] = 0; while (!que.empty()) { aa atop(que.top()); que.pop(); int now = atop.now; if (atop.time >= atime)return false; for (auto e : edges[now]) { long long int nexttime = atop.time + e.fincost; int nextplace = e.fin; if (atime< nexttime+perftime[nextplace]) { } else { long long int nexttime = atop.time + e.cost; int nextplace = e.to; if (mintime[nextplace] > nexttime) { if (nextplace == D)return true; mintime[nextplace] = nexttime; que.push(aa{ false,nexttime,nextplace }); } } } } return false; } int main() { for (int i = 0; i < 30000; ++i) { perftime[i] = My_LInf; } cin >> N >> M >> S >> D; vector<vector<edge>>edges(N); for (int i = 0; i < M; ++i) { int L; cin >> L; vector<int>ss; for (int i = 0; i < L; ++i) { int s; cin >> s; ss.push_back(s); } vector<int>ws; vector<edge>aedges; int allsum = 0; for (int i = 0; i < L - 1; ++i) { int w; cin >> w; ws.push_back(w); allsum += w; } int nowsum = 0; for (int i = 0; i < L - 1; ++i) { edges[ss[i]].push_back(edge{ ss[i],ss[i + 1],ss[L - 1],allsum - nowsum,ws[i] }); nowsum += ws[i]; edges[ss[i+1]].push_back(edge{ ss[i+1],ss[i],ss[0],nowsum,ws[i] }); } } { priority_queue<aa, vector<aa>, Compare>que; que.push(aa{ true,0,D }); perftime[D] = 0; while (!que.empty()) { aa atop(que.top()); que.pop(); int now = atop.now; bool aslept = atop.slept; for (auto e : edges[now]) { long long int nexttime = atop.time + e.cost; int nextplace = e.to; if (perftime[nextplace] > nexttime) { perftime[nextplace] = nexttime; que.push(aa{ aslept,nexttime,nextplace }); } } } } { long long int amin = 0; long long int amax = My_LInf / 2; while (amin + 1 != amax) { long long int amid = (amin + amax) / 2; if (check(amid, edges)) { amax = amid; } else { amin = amid; } } long long int ans = amax; cout << amax << endl; } return 0; }
Submission Info
Submission Time | |
---|---|
Task | C - メンテナンス明け |
User | yuma000 |
Language | C++11 (GCC 4.9.2) |
Score | 100 |
Code Size | 2880 Byte |
Status | AC |
Exec Time | 418 ms |
Memory | 6568 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 | 143 ms | 6112 KB |
large/20_large-01 | AC | 172 ms | 6120 KB |
large/20_large-02 | AC | 155 ms | 6240 KB |
large/20_large-03 | AC | 418 ms | 6544 KB |
large/20_large-04 | AC | 372 ms | 6568 KB |
large/31_max_large | AC | 59 ms | 3804 KB |
small/00_sample00 | AC | 28 ms | 1308 KB |
small/00_sample01 | AC | 28 ms | 1184 KB |
small/00_sample02 | AC | 28 ms | 1184 KB |
small/10_small-0000 | AC | 29 ms | 1316 KB |
small/10_small-0001 | AC | 28 ms | 1320 KB |
small/10_small-0002 | AC | 29 ms | 1180 KB |
small/10_small-0003 | AC | 27 ms | 1440 KB |
small/10_small-0004 | AC | 27 ms | 1308 KB |
small/10_small-0005 | AC | 28 ms | 1308 KB |
small/10_small-0006 | AC | 30 ms | 1308 KB |
small/10_small-0007 | AC | 29 ms | 1432 KB |
small/10_small-0008 | AC | 28 ms | 1316 KB |
small/10_small-0009 | AC | 28 ms | 1308 KB |
small/10_small-0010 | AC | 29 ms | 1312 KB |
small/10_small-0011 | AC | 31 ms | 1308 KB |
small/10_small-0012 | AC | 32 ms | 1304 KB |
small/10_small-0013 | AC | 28 ms | 1312 KB |
small/10_small-0014 | AC | 28 ms | 1312 KB |
small/10_small-0015 | AC | 29 ms | 1428 KB |
small/10_small-0016 | AC | 28 ms | 1312 KB |
small/10_small-0017 | AC | 30 ms | 1316 KB |
small/10_small-0018 | AC | 30 ms | 1432 KB |
small/10_small-0019 | AC | 29 ms | 1248 KB |
small/30_max_small | AC | 27 ms | 1188 KB |
small/40_simple_0000 | AC | 26 ms | 1312 KB |
small/40_simple_0001 | AC | 26 ms | 1312 KB |
small/40_simple_0002 | AC | 28 ms | 1188 KB |
small/40_simple_0003 | AC | 29 ms | 1184 KB |
small/40_simple_0004 | AC | 28 ms | 1308 KB |
small/40_simple_0005 | AC | 27 ms | 1184 KB |
small/40_simple_0006 | AC | 26 ms | 1304 KB |
small/40_simple_0007 | AC | 27 ms | 1308 KB |
small/40_simple_0008 | AC | 27 ms | 1184 KB |
small/40_simple_0009 | AC | 27 ms | 1312 KB |
small/40_simple_0010 | AC | 28 ms | 1188 KB |
small/40_simple_0011 | AC | 25 ms | 1184 KB |
small/40_simple_0012 | AC | 28 ms | 1184 KB |
small/40_simple_0013 | AC | 27 ms | 1360 KB |
small/40_simple_0014 | AC | 27 ms | 1316 KB |
small/40_simple_0015 | AC | 27 ms | 1196 KB |
small/40_simple_0016 | AC | 25 ms | 1192 KB |
small/40_simple_0017 | AC | 27 ms | 1180 KB |
small/40_simple_0018 | AC | 27 ms | 1184 KB |
small/40_simple_0019 | AC | 28 ms | 1188 KB |
small/90_dijkstra_killer_00 | AC | 26 ms | 1180 KB |
small/90_dijkstra_killer_01 | AC | 28 ms | 1180 KB |
small/91_tayama_killer_00 | AC | 27 ms | 1184 KB |
small/91_tayama_killer_01 | AC | 25 ms | 1188 KB |
small/91_tayama_killer_02 | AC | 27 ms | 1188 KB |
small/91_tayama_killer_03 | AC | 28 ms | 1188 KB |
small/91_tayama_killer_04 | AC | 28 ms | 1312 KB |
small/91_tayama_killer_05 | AC | 27 ms | 1188 KB |