Submission #1230601

#TimeUsernameProblemLanguageResultExecution timeMemory
1230601JovicaCommuter Pass (JOI18_commuter_pass)C++20
31 / 100
193 ms21680 KiB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;
int const maxn = 1e5+1;
vector<vector<array<ll,2> > > adj(maxn);
ll n;
ll odS[maxn];
bool visited[maxn];

void djikstra(ll pocetok,ll kraj)
{
    priority_queue<array<ll,2>,vector<array<ll,2> > , greater<array<ll,2> > > pq;
    memset(visited,0,sizeof(visited));
    pq.push({0,pocetok});

    while (pq.size())
    {
        ll p = pq.top()[1],d = pq.top()[0];pq.pop();
        if (visited[p]) continue;
        visited[p] = true;
        odS[p] = d;
        if (p == kraj) continue;

        for (auto a: adj[p])
        {
            if (visited[a[0]] == false) pq.push({d + a[1],a[0]});

        }
    }
}

bool pripagja[maxn];
void dfs(ll p,ll const kraj)
{
    pripagja[p] = true;
    if (p == kraj) return;
    for (auto s: adj[p])
    {
        if (odS[s[0]] + s[1] == odS[p] && pripagja[s[0]] == false) dfs(s[0],kraj);
    }
}

ll f(ll pocetok,ll kraj)
{
    priority_queue<array<ll,2>,vector<array<ll,2> > , greater<array<ll,2> > > pq;
    pq.push({0,pocetok});
    memset(visited,0,sizeof(visited));

    while(pq.size())
    {
        ll p = pq.top()[1],d = pq.top()[0];pq.pop();
        if (p == kraj) return d;
        if (visited[p]) continue;
        visited[p] = true;

        for (auto a: adj[p])
        {
            if (visited[a[0]] == false)
            {
                if (pripagja[p] && pripagja[a[0]]) pq.push({d,a[0]});
                else pq.push({d + a[1],a[0]});
            }
        }
    }
}

int main()
{
    ll m,s,t,pocetok,kraj;
    cin>>n>>m>>s>>t>>pocetok>>kraj;

    for (ll i=0;i<m;i++)
    {
        ll a,b,c;
        cin>>a>>b>>c;
        adj[a].push_back({b,c});
        adj[b].push_back({a,c});
    }

    djikstra(t,s);


    dfs(s,t);

    //for (ll i=1;i<=n;i++) cout<<odS[i]<<" "<<pripagja[i]<<endl;

    cout<<f(pocetok,kraj);
    return 0;
}

Compilation message (stderr)

commuter_pass.cpp: In function 'll f(ll, ll)':
commuter_pass.cpp:66:1: warning: control reaches end of non-void function [-Wreturn-type]
   66 | }
      | ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...