# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
331588 | 2020-11-29T03:24:43 Z | quindecim | Islands (IOI08_islands) | C++14 | 31 ms | 24044 KB |
#pragma GCC optimize ("Ofast") #pragma GCC target ("avx2") #include <bits/stdc++.h> using namespace std; using ll = long long; const int MOD = 1e9+7; const int MX = 1e6+10; const ll INF = 0x3f3f3f3f3f3f3f3f; int n, m, a[MX], w[MX]; vector<int> adj[MX]; ll ans, ret; vector<ll> V, S; bool vv[MX]; inline int cycle(int u) { if(vv[u]) return u; vv[u] = 1; int r = cycle(a[u]); if(r) { V.push_back(u); S.push_back(w[u]); if(r==u) return 0; else return r; } vv[u] = 0; return 0; } inline ll dfs(int u) { ll mx = 0; vv[u] = 1; for(int v : adj[u]) { if(!vv[v]) { ll r = dfs(v) + w[v]; ret = max(ret, mx+r); mx = max(mx, r); } } return mx; } void solve(int u) { V.clear(); S.clear(); cycle(u); reverse(V.begin(), V.end()); reverse(S.begin(), S.end()); for(auto &v : V) v = dfs(v); m = V.size(); for(int i = m-1; i > 0; --i) swap(S[i], S[i-1]); for(int i = 1; i < m; ++i) S[i] += S[i-1]; ll m1 = -INF, m2 = -INF; for(int i = 0; i < m; ++i) { ret = max(ret, max(m1+S[i]+V[i], m2-S[i]+V[i]+S[m-1])); m1 = max(m1, V[i]-S[i]); m2 = max(m2, V[i]+S[i]); } } int main() { cin.tie(0)->sync_with_stdio(0); freopen("input.in", "r", stdin); cin >> n; for(ll i = 1; i <= n; ++i) { cin >> a[i] >> w[i]; adj[a[i]].push_back(i); } for(ll i = 1; i <= n; ++i) if(!vv[i]) solve(i), ans+=ret, ret = 0; cout << ans << "\n"; return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 19 ms | 23916 KB | Output isn't correct |
2 | Incorrect | 20 ms | 23916 KB | Output isn't correct |
3 | Incorrect | 19 ms | 23916 KB | Output isn't correct |
4 | Incorrect | 23 ms | 24044 KB | Output isn't correct |
5 | Incorrect | 20 ms | 23916 KB | Output isn't correct |
6 | Incorrect | 20 ms | 24044 KB | Output isn't correct |
7 | Incorrect | 19 ms | 23916 KB | Output isn't correct |
8 | Incorrect | 19 ms | 23916 KB | Output isn't correct |
9 | Incorrect | 23 ms | 23916 KB | Output isn't correct |
10 | Incorrect | 23 ms | 23916 KB | Output isn't correct |
11 | Incorrect | 23 ms | 23916 KB | Output isn't correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 19 ms | 23916 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 19 ms | 23916 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 22 ms | 23916 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 24 ms | 23916 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 19 ms | 23916 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 19 ms | 23916 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 21 ms | 23916 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 31 ms | 23916 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |