# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
58756 | 2018-07-19T08:59:00 Z | Sherazin | Islands (IOI08_islands) | C++14 | 790 ms | 132096 KB |
#include <bits/stdc++.h> #define pll pair<long long, long long> #define x first #define y second using namespace std; const int N = 1e6 + 5; int n; long long deg[N], dm[N]; pll par[N], dp[N]; bitset<N> vis; long long solve(int u) { long long ret = 0; int sz; vector<pll> V; deque<pll> Q; V.emplace_back(0, 0); while(deg[u]) { deg[u]--; dm[u] = max(dm[u], dp[u].x + dp[u].y); ret = max(ret, dm[u]); V.emplace_back(u, par[u].y); u = par[u].x; } sz = V.size() - 1; for(int i = 1; i <= sz; i++) V[i].y += V[i - 1].y; for(int i = 2; i <= sz; i++) { while(!Q.empty() && Q.back().x < V[i - 1].y + dp[V[i].x].x) Q.pop_back(); Q.emplace_back(V[i - 1].y + dp[V[i].x].x, i); } ret = max(ret, dp[V[1].x].x + Q.front().x); for(int i = 1; i < sz; i++) { if(Q.front().y == i + 1) Q.pop_front(); while(!Q.empty() && Q.back().x < V[sz].y + V[i - 1].y + dp[V[i].x].x) Q.pop_back(); Q.emplace_back(V[sz].y + V[i - 1].y + dp[V[i].x].x, i); ret = max(ret, dp[V[i + 1].x].x + Q.front().x - V[i].y); } return ret; } int main() { scanf("%d", &n); for(int i = 1, v, w; i <= n; i++) { scanf("%d %d", &v, &w); par[i] = pll(v, w); deg[v]++; } queue<int> Q; for(int i = 1; i <= n; i++) if(!deg[i]) Q.emplace(i); while(!Q.empty()) { int now = Q.front(); Q.pop(); long long p = par[now].x, w = par[now].y; dm[now] = max(dm[now], dp[now].x + dp[now].y); dm[p] = max(dm[p], dm[now]); long long ret = dp[now].x + w; if(ret > dp[p].x) swap(ret, dp[p].x); if(ret > dp[p].y) swap(ret, dp[p].y); if(!--deg[p]) Q.emplace(p); } long long ans = 0; for(int i = 1; i <= n; i++) if(deg[i]) ans += solve(i); printf("%lld", ans); return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 3 ms | 380 KB | Output is correct |
2 | Correct | 2 ms | 380 KB | Output is correct |
3 | Correct | 3 ms | 424 KB | Output is correct |
4 | Correct | 2 ms | 580 KB | Output is correct |
5 | Correct | 3 ms | 580 KB | Output is correct |
6 | Correct | 2 ms | 740 KB | Output is correct |
7 | Correct | 2 ms | 740 KB | Output is correct |
8 | Correct | 2 ms | 740 KB | Output is correct |
9 | Correct | 2 ms | 740 KB | Output is correct |
10 | Correct | 2 ms | 740 KB | Output is correct |
11 | Correct | 2 ms | 740 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 3 ms | 740 KB | Output is correct |
2 | Correct | 3 ms | 740 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 4 ms | 796 KB | Output is correct |
2 | Correct | 4 ms | 952 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 10 ms | 1776 KB | Output is correct |
2 | Correct | 18 ms | 3380 KB | Output is correct |
3 | Correct | 12 ms | 3380 KB | Output is correct |
4 | Correct | 9 ms | 3380 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 38 ms | 4292 KB | Output is correct |
2 | Correct | 52 ms | 6400 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 74 ms | 11584 KB | Output is correct |
2 | Correct | 77 ms | 13124 KB | Output is correct |
3 | Correct | 116 ms | 17592 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 198 ms | 19448 KB | Output is correct |
2 | Correct | 216 ms | 30064 KB | Output is correct |
3 | Correct | 211 ms | 30064 KB | Output is correct |
4 | Correct | 310 ms | 40524 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 405 ms | 40524 KB | Output is correct |
2 | Correct | 518 ms | 46932 KB | Output is correct |
3 | Correct | 352 ms | 46932 KB | Output is correct |
4 | Correct | 390 ms | 57612 KB | Output is correct |
5 | Correct | 356 ms | 58436 KB | Output is correct |
6 | Correct | 790 ms | 62960 KB | Output is correct |
7 | Correct | 435 ms | 96456 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 372 ms | 96456 KB | Output is correct |
2 | Correct | 389 ms | 96456 KB | Output is correct |
3 | Correct | 486 ms | 109260 KB | Output is correct |
4 | Correct | 501 ms | 109260 KB | Output is correct |
5 | Runtime error | 421 ms | 132096 KB | Memory limit exceeded: We have a known bug that the memory usage is measured incorrectly (possibly because of Meltdown/Spectre patch), so your solution may be correct. Please submit again. Sorry for the inconvenience. |
6 | Halted | 0 ms | 0 KB | - |