# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
53723 | 2018-07-01T05:57:12 Z | 김세빈(#1437) | Islands (IOI08_islands) | C++11 | 893 ms | 133816 KB |
#include <bits/stdc++.h> using namespace std; typedef long long ll; vector <ll> V[1010101], S; ll P[1010101], L[1010101]; ll K[1010101], D[1010101], X[1010101]; ll chk[1010101]; ll n, ans, rt; ll dfs(ll p) { ll i, m1, m2, k; m1 = m2 = 0; chk[p] = 1; for(i=0;i<V[p].size();i++){ if(!chk[V[p][i]]){ k = dfs(V[p][i]) + L[V[p][i]]; if(k > m1) m2 = m1, m1 = k; else if(k > m2) m2 = k; } } rt = max(rt, m1 + m2); return m1; } int main() { ll i, j, p; scanf("%lld", &n); for(i=1;i<=n;i++){ scanf("%lld%lld", P+i, L+i); V[P[i]].push_back(i); } for(i=1;i<=n;i++){ if(!chk[i]){ S.clear(); rt = 0; for(p=i,j=0;!chk[p];){ S.push_back(p); chk[p] = ++j; p = P[p]; } for(j=0;j<chk[p]-1;j++) chk[S[j]] = 0; p = chk[p] - 1; for(j=p;j<S.size();j++) K[j] = dfs(S[j]); K[S.size()] = K[p]; if(S.size() - p > 1){ if(P[S[p]] == P[S[p+1]]){ for(j=p;j<S.size();j++) D[j] = L[S[j]]; } else{ for(j=p+1;j<S.size();j++) D[j] = L[S[j-1]]; D[p] = L[S.back()]; } X[p] = K[p]; rt = max(rt, X[p]); for(j=p+1;j<S.size();j++){ X[j] = max(X[j-1] + D[j-1], K[j]); rt = max(rt, X[j]); } X[p+1] = K[p+1]; for(j=p+2;j<=S.size();j++){ X[j] = max(X[j-1] + D[j-1], K[j]); rt = max(rt, X[j]); } } ans += rt; } } printf("%lld\n", ans); return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 24 ms | 24184 KB | Output is correct |
2 | Incorrect | 24 ms | 24424 KB | Output isn't correct |
3 | Incorrect | 22 ms | 24424 KB | Output isn't correct |
4 | Incorrect | 26 ms | 24424 KB | Output isn't correct |
5 | Incorrect | 22 ms | 24424 KB | Output isn't correct |
6 | Correct | 22 ms | 24424 KB | Output is correct |
7 | Incorrect | 22 ms | 24424 KB | Output isn't correct |
8 | Incorrect | 21 ms | 24424 KB | Output isn't correct |
9 | Incorrect | 23 ms | 24424 KB | Output isn't correct |
10 | Correct | 22 ms | 24424 KB | Output is correct |
11 | Correct | 22 ms | 24424 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 22 ms | 24424 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 23 ms | 24424 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 29 ms | 25048 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 64 ms | 27136 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 138 ms | 33720 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 173 ms | 43244 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 362 ms | 55824 KB | Output is correct |
2 | Incorrect | 893 ms | 84620 KB | Output isn't correct |
3 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 573 ms | 133816 KB | Output is correct |
2 | Correct | 506 ms | 133816 KB | Output is correct |
3 | Incorrect | 577 ms | 133816 KB | Output isn't correct |
4 | Halted | 0 ms | 0 KB | - |