Submission #1315659

#TimeUsernameProblemLanguageResultExecution timeMemory
1315659aren_danceNetrpeljivost (COI23_netrpeljivost)C++20
27 / 100
1595 ms10184 KiB
#include <bits/stdc++.h>
using namespace std;
const int N=6e5+1;
#define ll long long
vector<vector<ll>> divide(int n,vector<vector<ll>> g){
    if(n==1){
        ll o=1e18;
        return {{o,o},{o,0}};
    }
    vector<vector<ll>> f(n+1,vector<ll>(n+1,1e18));
    vector<vector<ll>> g1(n/2+1,vector<ll>(n/2+1));
    vector<vector<ll>> g2(n/2+1,vector<ll>(n/2+1));
    for(int i=1;i<=n/2;++i){
        for(int j=1;j<=n/2;++j){
            g1[i][j]=g[i][j];
        }
    }
    for(int i=n/2+1;i<=n;++i){
        for(int j=n/2+1;j<=n;++j){
            g2[i-n/2][j-n/2]=g[i][j];
        }
    }
    vector<vector<ll>> r=divide(n/2,g1);
    vector<vector<ll>> d=divide(n/2,g2);
    for(int i=1;i<=n/2;++i){
        for(int j=1;j<=n/2;++j){
            for(int k=1;k<=n/2;++k){
                for(int p=1;p<=n/2;++p){
                    f[i][p+n/2]=min(f[i][p+n/2],r[i][j]+d[k][p]+g[j][k+n/2]);
                    f[p+n/2][i]=min(f[p+n/2][i],r[i][j]+d[k][p]+g[j][k+n/2]);
                }
            }
        }
    }
    return f;
}
int main() {
    ios_base::sync_with_stdio(NULL);
    cin.tie(NULL);
    cout.tie(NULL);
    int n;
    cin>>n;
    vector<vector<ll>> g(n+1,vector<ll> (n+1));
    for(int i=1;i<=n;++i){
        for(int j=1;j<=n;++j){
            cin>>g[i][j];
        }
    }
    vector<vector<ll>> p=divide(n,g);
    ll mn=1e18;
    for(int i=1;i<=n;++i){
        for(int j=1;j<=n;++j){
            mn=min(mn,p[i][j]);
        }
    }
    cout<<mn<<'\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...