Submission #618178
Source Code Expand
#include <cstdio> #include <vector> #include <queue> #include <algorithm> #include <functional> using namespace std; #define INF 1000000000 typedef pair<int, int> Pair; struct Edge { int to; int len; int penalty; int last; }; int n; int m; int low, high; int src; int dst; struct Edge e[2][300000]; vector<Edge> es[30000]; int mind[30000]; int dist[30000]; void dijkstra(int s) { priority_queue<Pair, vector<Pair>, greater<Pair> > q; fill(mind, mind+n, INF); mind[s] = 0; q.push(Pair(0, s)); while (!q.empty()) { Pair p = q.top(); q.pop(); int cost = p.first; int idx = p.second; if (mind[idx] < cost) continue; for (int i=0; i<es[idx].size(); i++) { Edge &e = es[idx][i]; int u = e.to; int len = e.len; if (mind[u] > cost + len) { mind[u] = cost + len; q.push(Pair(mind[u], u)); } } } } bool check(int x) { priority_queue<Pair, vector<Pair>, greater<Pair> > q; fill(dist, dist+n, INF); dist[src] = 0; q.push(Pair(0, src)); while (!q.empty()) { Pair p = q.top(); q.pop(); int cost = p.first; int idx = p.second; if (dist[idx] < cost) continue; for (int i=0; i<es[idx].size(); i++) { Edge &e = es[idx][i]; int u = e.to; int len = e.len; int penalty = e.penalty; int last = e.last; if (dist[u] > cost + len && cost+penalty<= x-mind[last]) { dist[u] = cost + len; q.push(Pair(dist[u], u)); } } } return dist[dst] <= x; } int main() { scanf("%d%d%d%d", &n, &m, &src, &dst); for (int i=0; i<m; i++) { int l; int s, s2; scanf("%d", &l); scanf("%d", &s); e[1][l-2].to = s; for (int j=0; j<l-1; j++) { scanf("%d", &e[0][j].to); if (j < l-2) e[1][l-3-j].to = e[0][j].to; else s2 = e[0][j].to; } for (int j=0; j<l-1; j++) { scanf("%d", &e[0][j].len); e[1][l-2-j].len = e[0][j].len; e[0][j].last = s2; e[1][j].last = s; } e[0][l-1].penalty = 0; e[1][l-1].penalty = 0; for (int j=l-2; j>=0; j--) { e[0][j].penalty = e[0][j+1].penalty + e[0][j].len; e[1][j].penalty = e[1][j+1].penalty + e[1][j].len; } es[s].push_back(e[0][0]); es[s2].push_back(e[1][0]); for (int j=1; j<l-1; j++) { es[e[0][j-1].to].push_back(e[0][j]); es[e[1][j-1].to].push_back(e[1][j]); } } dijkstra(dst); low = mind[src]-1; high = INF; while (high - low > 1) { int mid = (high+low)/2; if (check(mid)) high = mid; else low = mid; } printf("%d\n", high); }
Submission Info
Submission Time | |
---|---|
Task | C - メンテナンス明け |
User | potetisensei |
Language | C++ (GCC 4.9.2) |
Score | 100 |
Code Size | 3062 Byte |
Status | AC |
Exec Time | 272 ms |
Memory | 4140 KB |
Compile Error
./Main.cpp: In function ‘int main()’: ./Main.cpp:83:42: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result] scanf("%d%d%d%d", &n, &m, &src, &dst); ^ ./Main.cpp:88:24: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result] scanf("%d", &l); ^ ./Main.cpp:89:24: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result] scanf("%d", &s); ^ ./Main.cpp:92:37: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result] scanf("%d", &e[0][j].to); ^ ./Main.cpp:98:38: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_...
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 | 240 ms | 4136 KB |
large/20_large-01 | AC | 242 ms | 4140 KB |
large/20_large-02 | AC | 239 ms | 4136 KB |
large/20_large-03 | AC | 252 ms | 4100 KB |
large/20_large-04 | AC | 272 ms | 4124 KB |
large/31_max_large | AC | 62 ms | 3624 KB |
small/00_sample00 | AC | 26 ms | 1452 KB |
small/00_sample01 | AC | 27 ms | 1564 KB |
small/00_sample02 | AC | 26 ms | 1500 KB |
small/10_small-0000 | AC | 27 ms | 1568 KB |
small/10_small-0001 | AC | 27 ms | 1452 KB |
small/10_small-0002 | AC | 27 ms | 1444 KB |
small/10_small-0003 | AC | 26 ms | 1564 KB |
small/10_small-0004 | AC | 27 ms | 1444 KB |
small/10_small-0005 | AC | 26 ms | 1568 KB |
small/10_small-0006 | AC | 28 ms | 1448 KB |
small/10_small-0007 | AC | 26 ms | 1440 KB |
small/10_small-0008 | AC | 27 ms | 1444 KB |
small/10_small-0009 | AC | 28 ms | 1456 KB |
small/10_small-0010 | AC | 27 ms | 1444 KB |
small/10_small-0011 | AC | 28 ms | 1436 KB |
small/10_small-0012 | AC | 28 ms | 1440 KB |
small/10_small-0013 | AC | 28 ms | 1568 KB |
small/10_small-0014 | AC | 28 ms | 1448 KB |
small/10_small-0015 | AC | 28 ms | 1448 KB |
small/10_small-0016 | AC | 27 ms | 1444 KB |
small/10_small-0017 | AC | 27 ms | 1444 KB |
small/10_small-0018 | AC | 28 ms | 1444 KB |
small/10_small-0019 | AC | 27 ms | 1440 KB |
small/30_max_small | AC | 27 ms | 1444 KB |
small/40_simple_0000 | AC | 27 ms | 1568 KB |
small/40_simple_0001 | AC | 25 ms | 1568 KB |
small/40_simple_0002 | AC | 27 ms | 1448 KB |
small/40_simple_0003 | AC | 26 ms | 1440 KB |
small/40_simple_0004 | AC | 25 ms | 1572 KB |
small/40_simple_0005 | AC | 27 ms | 1444 KB |
small/40_simple_0006 | AC | 25 ms | 1440 KB |
small/40_simple_0007 | AC | 26 ms | 1440 KB |
small/40_simple_0008 | AC | 27 ms | 1444 KB |
small/40_simple_0009 | AC | 27 ms | 1432 KB |
small/40_simple_0010 | AC | 27 ms | 1444 KB |
small/40_simple_0011 | AC | 27 ms | 1444 KB |
small/40_simple_0012 | AC | 27 ms | 1448 KB |
small/40_simple_0013 | AC | 26 ms | 1444 KB |
small/40_simple_0014 | AC | 27 ms | 1440 KB |
small/40_simple_0015 | AC | 25 ms | 1560 KB |
small/40_simple_0016 | AC | 26 ms | 1448 KB |
small/40_simple_0017 | AC | 27 ms | 1432 KB |
small/40_simple_0018 | AC | 26 ms | 1440 KB |
small/40_simple_0019 | AC | 28 ms | 1432 KB |
small/90_dijkstra_killer_00 | AC | 26 ms | 1432 KB |
small/90_dijkstra_killer_01 | AC | 26 ms | 1564 KB |
small/91_tayama_killer_00 | AC | 27 ms | 1564 KB |
small/91_tayama_killer_01 | AC | 28 ms | 1556 KB |
small/91_tayama_killer_02 | AC | 28 ms | 1552 KB |
small/91_tayama_killer_03 | AC | 27 ms | 1436 KB |
small/91_tayama_killer_04 | AC | 25 ms | 1560 KB |
small/91_tayama_killer_05 | AC | 26 ms | 1568 KB |