Submission #356296

# Submission time Handle Problem Language Result Execution time Memory
356296 2021-01-23T09:11:24 Z achibasadzishvili Islands (IOI08_islands) C++14
90 / 100
1280 ms 131076 KB
#include<bits/stdc++.h>
#define ll long long
#define f first
#define s second
#define pb push_back
#define mp make_pair
#define N 1000002
using namespace std;
int n,l[N],k;
bool fix[N],F[N],c[N];
long long len;
long long mx[N],ans,pas;
vector<pair<int,int> >v[N];
int g[N],dis[N],szg,szdis,szd,szc;
void dfs(int x){
    if(F[x])return;
    F[x] = 1;
    for(int i=0; i<v[x].size(); i++)
        dfs(v[x][i].f);
}
void findc(int x,int par){
    if(fix[x]){
        g[szg] = x;
        dis[szdis] = l[par];
        szg++;
        szdis++;
        k = 1;
        return;
    }
    g[szg] = (x);
    szg++;
    fix[x] = 1;
    for(int i=0; i<v[x].size(); i++)
        if(v[x][i].s != par){
            dis[szdis] = (l[v[x][i].s]);szdis++;
            findc(v[x][i].f , v[x][i].s);
            if(k)return;
            szdis--;
        }
    szg--;
}
void findmx(int x,int par){
    for(int i=0; i<v[x].size(); i++){
        if(v[x][i].s != par && !c[v[x][i].f]){
            findmx(v[x][i].f , v[x][i].s);
            ans = max(ans , mx[x] + mx[v[x][i].f] + l[v[x][i].s]);
            mx[x] = max(mx[x] , mx[v[x][i].f] + l[v[x][i].s]);
        }
    }
}
int main(){
    ios::sync_with_stdio(false);
    cin >> n;
    ll P;
    for(int i=1; i<=n; i++){
        cin >> P >> l[i];
        v[P].pb(mp(i , i));
        v[i].pb(mp(P , i));
    }
    ll cur,cur2,pre;
    for(int s=1; s<=n; s++){
        if(F[s])continue;
        len = 0;
        ans = 0;
        k = 0;
        dfs(s);
        szg = 0;
        szdis = 0;
        findc(s , 0);
        szc = 0;
        szd = 0;
        int ind = 0;
        for(int i=0; i<szg; i++){
            if(g[i] == g[szg - 1]){
                ind = i + 1;
                break;
            }
        }
        for(int i=ind; i<szg; i++)
            c[g[i]] = 1;
        for(int i=ind; i<szg; i++){
            findmx(g[i] , 0);
            len += dis[i - 1];
        }
        cur = mx[g[ind]];
        cur2 = mx[g[ind]];
        pre = 0;
        for(int i=ind + 1; i<szg; i++){
            pre += dis[i - 1];
            ans = max(ans , cur + mx[g[i]] + pre);
            ans = max(ans , cur2 + len + mx[g[i]] - pre);
            cur = max(cur , mx[g[i]] - pre);
            cur2 = max(cur2 , mx[g[i]] + pre);
        }
        pas += ans;
    }
    
    cout << pas << '\n';
    return 0;
}

Compilation message

islands.cpp: In function 'void dfs(int)':
islands.cpp:18:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   18 |     for(int i=0; i<v[x].size(); i++)
      |                  ~^~~~~~~~~~~~
islands.cpp: In function 'void findc(int, int)':
islands.cpp:33:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   33 |     for(int i=0; i<v[x].size(); i++)
      |                  ~^~~~~~~~~~~~
islands.cpp: In function 'void findmx(int, int)':
islands.cpp:43:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   43 |     for(int i=0; i<v[x].size(); i++){
      |                  ~^~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 16 ms 23916 KB Output is correct
2 Correct 18 ms 23916 KB Output is correct
3 Correct 16 ms 23836 KB Output is correct
4 Correct 18 ms 23916 KB Output is correct
5 Correct 15 ms 23916 KB Output is correct
6 Correct 19 ms 23916 KB Output is correct
7 Correct 21 ms 23916 KB Output is correct
8 Correct 16 ms 23916 KB Output is correct
9 Correct 19 ms 23916 KB Output is correct
10 Correct 17 ms 23916 KB Output is correct
11 Correct 15 ms 23916 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 16 ms 24004 KB Output is correct
2 Correct 17 ms 23980 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 17 ms 23916 KB Output is correct
2 Correct 23 ms 24172 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 36 ms 24812 KB Output is correct
2 Correct 43 ms 26732 KB Output is correct
3 Correct 27 ms 24940 KB Output is correct
4 Correct 22 ms 24428 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 51 ms 27556 KB Output is correct
2 Correct 53 ms 29676 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 103 ms 35180 KB Output is correct
2 Correct 133 ms 37544 KB Output is correct
3 Correct 130 ms 45220 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 183 ms 44200 KB Output is correct
2 Correct 218 ms 61148 KB Output is correct
3 Correct 243 ms 61772 KB Output is correct
4 Correct 332 ms 78300 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 342 ms 68592 KB Output is correct
2 Correct 829 ms 98540 KB Output is correct
3 Correct 297 ms 65388 KB Output is correct
4 Correct 430 ms 92176 KB Output is correct
5 Correct 390 ms 93036 KB Output is correct
6 Correct 1280 ms 73144 KB Output is correct
7 Correct 426 ms 108524 KB Output is correct
# Verdict Execution time Memory Grader output
1 Runtime error 440 ms 131076 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -