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
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 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