제출 #990412

#제출 시각아이디문제언어결과실행 시간메모리
990412huutuanIslands (IOI08_islands)C++14
90 / 100
398 ms131072 KiB
#include<bits/stdc++.h> using namespace std; const int N=1e6+10; int n, vis[N], par[N], wpar[N], on_cycle[N]; vector<pair<int, int>> g[N]; long long pf[N], f[N][2]; void dfs(int u){ vis[u]=1; long long mx1=-1e18, mx2=-1e18; for (auto &e:g[u]){ int v=e.first, w=e.second; if (on_cycle[v]) continue; dfs(v); long long val=f[v][0]+w; f[u][0]=max(f[u][0], val); f[u][1]=max(f[u][1], f[v][1]); if (mx1<val) mx2=mx1, mx1=val; else mx2=max(mx2, val); } f[u][1]=max({f[u][1], f[u][0], mx1+mx2}); } int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> n; for (int i=1; i<=n; ++i){ int j, k; cin >> j >> k; g[j].emplace_back(i, k); par[i]=j; wpar[i]=k; } vector<int> cycle; long long ans=0; for (int i=1; i<=n; ++i) if (!vis[i]){ cycle.clear(); long long cur=0; int u=i; while (1){ if (vis[u]) break; vis[u]=1; cycle.push_back(u); u=par[u]; } cycle.erase(cycle.begin(), find(cycle.begin(), cycle.end(), u)); for (int v:cycle) on_cycle[v]=1; for (int v:cycle){ dfs(v); cur=max(cur, f[v][1]); } for (int j=1; j<=(int)cycle.size(); ++j){ pf[j]=pf[j-1]+wpar[cycle[j-1]]; } long long sum=pf[(int)cycle.size()]; long long mx1=-1e18, mx2=-1e18; for (int j=0; j<(int)cycle.size(); ++j){ cur=max(cur, f[cycle[j]][0]+pf[j]+mx1); cur=max(cur, f[cycle[j]][0]-pf[j]+mx2); mx1=max(mx1, f[cycle[j]][0]-pf[j]); mx2=max(mx2, f[cycle[j]][0]+sum+pf[j]); } ans+=cur; } cout << ans << '\n'; return 0; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...