Submission #1210153

#TimeUsernameProblemLanguageResultExecution timeMemory
1210153nvc2k8Commuter Pass (JOI18_commuter_pass)C++20
100 / 100
269 ms24644 KiB
#include <bits/stdc++.h>
#define TASK "asdkjaskdj"
#define INT_LIM (int) 2147483647
#define LL_LIM (long long) 9223372036854775807
#define endl '\n'
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define BIT(i,x) (((i)>>(x))&1)
#define FOR(i,a,b) for(int i = (a); i<=(b); i++)
#define FORD(i,a,b) for(int i = (a); i>=(b); i--)
#define ll long long
#define pii pair<int,int>
using namespace std;
///------------------------------------------///
int n,m;
int s,t,x,y;
vector<pair<int,ll>> adj[100005];

void inp()
{
    cin >> n >> m;
    cin >> s >> t;
    cin >> x >> y;
    FOR(i, 1, m)
    {
        int u,v,c;
        cin >> u >> v >> c;
        adj[u].pb(mp(v,c));
        adj[v].pb(mp(u,c));
    }
}

ll distS[100005], distT[100005], distX[100005], distY[100005];

void dijkstra(int source, ll dist[100005])
{
    FOR(i, 1, n) dist[i] = LL_LIM;
    priority_queue<pair<ll,int>, vector<pair<ll,int>>, greater<pair<ll,int>> > q;
    q.push(mp(0,source)); dist[source] = 0;

    while (!q.empty())
    {
        int u = q.top().se; ll d = q.top().fi;
        q.pop();
        if (d>dist[u]) continue;
        for (auto V:adj[u])
        {
            int v = V.fi; ll w = V.se;
            if (d+w<dist[v])
            {
                dist[v] = d+w; q.push(mp(d+w, v));
            }
        }
    }
}

ll ans;
ll minx[100005], miny[100005];

void calc(int u)
{
    if (minx[u]!=LL_LIM) return;
    minx[u] = distX[u]; miny[u] = distY[u];

    for (auto V:adj[u])
    {
        int v = V.fi; ll w = V.se;

        if (distS[u]+w+distT[v]==distS[t])
        {
            calc(v);
            minx[u] = min(minx[u], minx[v]);
            miny[u] = min(miny[u], miny[v]);
        }
    }

    ans = min(ans, distX[u]+miny[u]);
    ans = min(ans, distY[u]+minx[u]);
}

void solve()
{
    dijkstra(s, distS);
    dijkstra(t, distT);
    dijkstra(x, distX);
    dijkstra(y, distY);
    ans = distX[y];
//    cout << ans << endl;

    FOR(i, 1, n)
    {
        minx[i] = miny[i] = LL_LIM;
    }
    calc(s);

    cout << ans << endl;
}

signed main()
{
    ///--------------------------///
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    if (fopen(TASK".INP","r")!=NULL)
    {
        freopen(TASK".INP","r",stdin);
        freopen(TASK".OUT","w",stdout);
    }
    ///--------------------------///

    int NTEST = 1;
    //cin >> NTEST;

    while (NTEST--)
    {
        inp();
        solve();
    }

    return 0;
}

///------------------------------------------///

Compilation message (stderr)

commuter_pass.cpp: In function 'int main()':
commuter_pass.cpp:107:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  107 |         freopen(TASK".INP","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
commuter_pass.cpp:108:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  108 |         freopen(TASK".OUT","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...