Submission #989489

# Submission time Handle Problem Language Result Execution time Memory
989489 2024-05-28T08:35:45 Z huutuan Islands (IOI08_islands) C++14
64 / 100
264 ms 131072 KB
#include<bits/stdc++.h>

using namespace std;

#pragma GCC optimize("trapv")

#define int long long

const int N=1e6+10;
int n, vis[N], par[N], wpar[N], on_cycle[N];
vector<pair<int, int>> g[N];
int pf[N], f[N][2];

void dfs(int u){
   vis[u]=1;
   int mx1=-1e18, mx2=-1e18;
   for (auto &e:g[u]){
      int v=e.first, w=e.second;
      if (on_cycle[v]) continue;
      dfs(v);
      int 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, mx1);
   }
   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> ans;
   for (int i=1; i<=n; ++i) if (!vis[i]){
      int cur=0;
      vector<int> cycle;
      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]];
      }
      int sum=pf[(int)cycle.size()];
      int 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.push_back(cur);
   }
   cout << accumulate(ans.begin(), ans.end(), 0ll) << '\n';
   return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 11 ms 24664 KB Output is correct
2 Incorrect 8 ms 24668 KB Output isn't correct
3 Correct 10 ms 24516 KB Output is correct
4 Correct 11 ms 24504 KB Output is correct
5 Correct 9 ms 24668 KB Output is correct
6 Correct 9 ms 24668 KB Output is correct
7 Correct 9 ms 24668 KB Output is correct
8 Correct 9 ms 24668 KB Output is correct
9 Correct 10 ms 24512 KB Output is correct
10 Incorrect 12 ms 24596 KB Output isn't correct
11 Correct 9 ms 24580 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 12 ms 24664 KB Output is correct
2 Correct 12 ms 24668 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 10 ms 24668 KB Output is correct
2 Correct 10 ms 24152 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 19 ms 24924 KB Output is correct
2 Correct 19 ms 26716 KB Output is correct
3 Correct 15 ms 26204 KB Output is correct
4 Incorrect 17 ms 24672 KB Output isn't correct
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 22 ms 28632 KB Output is correct
2 Correct 38 ms 32240 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 61 ms 39632 KB Output is correct
2 Correct 90 ms 45388 KB Output is correct
3 Correct 67 ms 44992 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 99 ms 54308 KB Output is correct
2 Correct 159 ms 64644 KB Output is correct
3 Correct 151 ms 76876 KB Output is correct
4 Correct 198 ms 75948 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 191 ms 79400 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 264 ms 131072 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -