Submission #429653

#TimeUsernameProblemLanguageResultExecution timeMemory
429653LouayFarahShortcut (IOI16_shortcut)C++14
0 / 100
2070 ms936 KiB
#include "bits/stdc++.h"
#include "shortcut.h"
using namespace std;

#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define ll long long

long long find_shortcut(int n, vector<int> l, vector<int> d, int c)
{
    vector<vector<ll>> adj(2*n, vector<ll>(2*n, -1));
    for(int i = 0; i<n-1; i++)
    {
        adj[i][i+1] = l[i];
        adj[i+1][i] = l[i];
    }

    for(int i = 0; i<n ; i++)
    {
        adj[i][n+i] = d[i];
        adj[n+i][i] = d[i];
    }

    ll res = 1e18;

    for(int s1 = 0; s1<n; s1++)
    {
        for(int s2 = s1+1; s2<n; s2++)
        {
            vector<vector<ll>> dist(2*n, vector<ll>(2*n, 1e18));

            ll last = adj[s1][s2];
            if(s2==s1+1)
            {
                if(c<adj[s1][s2])
                {
                    adj[s1][s2] = c;
                    adj[s2][s1] = c;
                }
            }
            else
            {
                adj[s1][s2] = c;
                adj[s2][s1] = c;
            }

            for(int i = 0; i<2*n; i++)
            {
                for(int j = 0; j<2*n; j++)
                {
                    if(i==j)
                        dist[i][j] = 0;
                    else if(adj[i][j]!=-1)
                        dist[i][j] = adj[i][j];
                }
            }

            for(int k = 0; k<2*n; k++)
                for(int i = 0; i<2*n; i++)
                    for(int j  = 0; j<2*n; j++)
                        dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]);
            ll curr = 0;
            for(int i = 0; i<2*n; i++)
                for(int j = 0; j<2*n; j++)
                    curr = max(curr, dist[i][j]);

            res = min(res, curr);

            adj[s1][s2] = last;
            adj[s2][s1] = last;
        }
    }

    return res;
}
#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...