Submission #958159

#TimeUsernameProblemLanguageResultExecution timeMemory
95815912345678Rail (IOI14_rail)C++17
56 / 100
2181 ms135372 KiB
#include "rail.h"
#include <bits/stdc++.h>

using namespace std;

const int nx=5e3+5;

int dp[nx][nx], mn[nx], vs[nx];

int query(int i, int j)
{
    if (i>j) swap(i, j);
    if (dp[i][j]!=0) return dp[i][j];
    return dp[i][j]=getDistance(i, j);
}

void findLocation(int N, int first, int location[], int stype[])
{
    location[0]=first;
    stype[0]=1;
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
    pq.push({0, 0});
    for (int i=1; i<N; i++) mn[i]=1e9; 
    while (!pq.empty())
    {
        auto [w, u]=pq.top();
        pq.pop();
        if (vs[u]) continue;
        vs[u]=1;
        for (int v=0; v<N; v++) if (v!=u&&mn[v]>query(u, v)) mn[v]=query(u, v), stype[v]=2-stype[u]+1, location[v]=(stype[u]==1)?location[u]+query(u, v):location[u]-query(u, v), pq.push({query(u, v), v});
    }
    //for (int i=0; i<N; i++) cout<<"debug "<<i<<' '<<stype[i]<<' '<<location[i]<<'\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...