Submission #17666

#TimeUsernameProblemLanguageResultExecution timeMemory
17666chatterboy막대기 (KOI13_game)C++14
0 / 100
111 ms3936 KiB
#include <cstdio>
#include <cstring>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
#define MAXN 100001
typedef long long ll;
struct Stick {
	int t, d;
};
int N, L;
Stick A[MAXN];
map<int,vector<int>> B, C; // t, d
ll cache[MAXN];
ll solve(int p) {
	ll &ret = cache[p];
	if (ret != -1) return ret;
	ret = 0;
	vector<int> vB = B[A[p].t];
	vector<int> vC = C[A[p].d];
	for (int i=0; i<vB.size(); ++i)
		if (p!=vB[i] && A[vB[i]].d>A[p].d)
			ret = max(ret, solve(vB[i]));
	for (int i=0; i<vC.size(); ++i)
		if (p!=vC[i] && A[vC[i]].t>A[p].t)
			ret = max(ret, solve(vC[i]));
	return ret=ret+L+abs(A[p].t-A[p].d);
}
int main() {
	memset(cache,-1,sizeof cache);
	scanf("%d%d", &N, &L);
	for (int i=1; i<=N; ++i) {
		scanf("%d%d", &A[i].t, &A[i].d);
		B[A[i].t].push_back(i);
		C[A[i].d].push_back(i);
	}
	ll sol = 0;
	for (int i=1; i<=N; ++i)
		sol = max(sol, solve(i));
	printf("%lld", sol);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...