Submission #2009215


Source Code Expand

#include <queue>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
struct edge { int to, cost, last; long long adv; };
struct state { int pos; long long cost; };
bool operator<(const state& s1, const state& s2) { return s1.cost > s2.cost; }
int N, M, S, T, x; long long dr[25259]; vector<int> s[133333], w[133333]; vector<edge> g[25259];
int main() {
	cin.tie(0);
	ios_base::sync_with_stdio(false);
	cin >> N >> M >> S >> T;
	for (int i = 0; i < M; i++) {
		cin >> x; s[i].resize(x); w[i].resize(x - 1);
		for (int j = 0; j < x; j++) cin >> s[i][j];
		for (int j = 0; j < x - 1; j++) cin >> w[i][j];
		long long cs1 = 0;
		for (int j = 0; j < x - 1; j++) {
			g[s[i][j + 1]].push_back(edge{ s[i][j], w[i][j], s[i][0], cs1 });
			cs1 += w[i][j];
		}
		long long cs2 = 0;
		for (int j = x - 2; j >= 0; j--) {
			g[s[i][j]].push_back(edge{ s[i][j + 1], w[i][j], s[i][x - 1], cs2 });
			cs2 += w[i][j];
		}
	}
	fill(dr, dr + N, 1LL << 60); dr[T] = 0;
	priority_queue<state> q1; q1.push(state{ T, 0 });
	while (!q1.empty()) {
		int u = q1.top().pos; q1.pop();
		for (edge e : g[u]) {
			long long nd = dr[u] + e.cost;
			if (dr[e.to] > nd) {
				dr[e.to] = nd;
				q1.push(state{ e.to, nd });
			}
		}
	}
	for (int i = 0; i < N; i++) {
		for (edge &e : g[i]) {
			e.adv += dr[e.last];
		}
	}
	int l = 0, r = 1000000009;
	while (r - l > 1) {
		int m = (l + r) >> 1;
		fill(dr, dr + N, 1LL << 60); dr[S] = 0;
		priority_queue<state> que; que.push(state{ S, 0 });
		while (!que.empty()) {
			int u = que.top().pos; que.pop();
			for (edge e : g[u]) {
				long long nd = dr[u] + e.cost;
				if (dr[e.to] > nd && nd + e.adv <= m) {
					dr[e.to] = nd;
					que.push(state{ e.to, nd });
				}
			}
		}
		if (dr[T] == 1LL << 60) l = m;
		else r = m;
	}
	cout << r << endl;
	return 0;
}

Submission Info

Submission Time
Task C - メンテナンス明け
User square1001
Language C++14 (GCC 5.4.1)
Score 100
Code Size 1868 Byte
Status AC
Exec Time 138 ms
Memory 11536 KB

Judge Result

Set Name Subtask1 Subtask2
Score / Max Score 50 / 50 50 / 50
Status
AC × 52
AC × 6
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 119 ms 11536 KB
large/20_large-01 AC 120 ms 11536 KB
large/20_large-02 AC 138 ms 11536 KB
large/20_large-03 AC 118 ms 11476 KB
large/20_large-04 AC 129 ms 11532 KB
large/31_max_large AC 22 ms 9088 KB
small/00_sample00 AC 4 ms 7168 KB
small/00_sample01 AC 4 ms 7168 KB
small/00_sample02 AC 4 ms 7168 KB
small/10_small-0000 AC 4 ms 7168 KB
small/10_small-0001 AC 4 ms 7168 KB
small/10_small-0002 AC 4 ms 7168 KB
small/10_small-0003 AC 4 ms 7168 KB
small/10_small-0004 AC 4 ms 7168 KB
small/10_small-0005 AC 4 ms 7168 KB
small/10_small-0006 AC 4 ms 7168 KB
small/10_small-0007 AC 4 ms 7168 KB
small/10_small-0008 AC 4 ms 7168 KB
small/10_small-0009 AC 4 ms 7168 KB
small/10_small-0010 AC 4 ms 7168 KB
small/10_small-0011 AC 4 ms 7168 KB
small/10_small-0012 AC 4 ms 7168 KB
small/10_small-0013 AC 4 ms 7168 KB
small/10_small-0014 AC 4 ms 7168 KB
small/10_small-0015 AC 4 ms 7168 KB
small/10_small-0016 AC 4 ms 7168 KB
small/10_small-0017 AC 4 ms 7168 KB
small/10_small-0018 AC 4 ms 7168 KB
small/10_small-0019 AC 4 ms 7168 KB
small/30_max_small AC 4 ms 7168 KB
small/40_simple_0000 AC 4 ms 7168 KB
small/40_simple_0001 AC 4 ms 7168 KB
small/40_simple_0002 AC 4 ms 7168 KB
small/40_simple_0003 AC 4 ms 7040 KB
small/40_simple_0004 AC 4 ms 7168 KB
small/40_simple_0005 AC 4 ms 7168 KB
small/40_simple_0006 AC 4 ms 7040 KB
small/40_simple_0007 AC 4 ms 7040 KB
small/40_simple_0008 AC 4 ms 7168 KB
small/40_simple_0009 AC 4 ms 7040 KB
small/40_simple_0010 AC 4 ms 7168 KB
small/40_simple_0011 AC 4 ms 7040 KB
small/40_simple_0012 AC 4 ms 7040 KB
small/40_simple_0013 AC 4 ms 7040 KB
small/40_simple_0014 AC 4 ms 7040 KB
small/40_simple_0015 AC 4 ms 7168 KB
small/40_simple_0016 AC 4 ms 7040 KB
small/40_simple_0017 AC 4 ms 7168 KB
small/40_simple_0018 AC 4 ms 7040 KB
small/40_simple_0019 AC 4 ms 7040 KB
small/90_dijkstra_killer_00 AC 4 ms 7168 KB
small/90_dijkstra_killer_01 AC 4 ms 7168 KB
small/91_tayama_killer_00 AC 4 ms 7040 KB
small/91_tayama_killer_01 AC 4 ms 7040 KB
small/91_tayama_killer_02 AC 4 ms 7168 KB
small/91_tayama_killer_03 AC 4 ms 7168 KB
small/91_tayama_killer_04 AC 4 ms 7168 KB
small/91_tayama_killer_05 AC 4 ms 7168 KB