Submission #379237

#TimeUsernameProblemLanguageResultExecution timeMemory
379237ttnhuy313Commuter Pass (JOI18_commuter_pass)C++14
24 / 100
1456 ms23648 KiB
#include<bits/stdc++.h>
using namespace std;
 
#define y1 as214
#define ii pair < int , int >
#define iii pair < int , ii >
#define iv pair < ii , ii >
 
#define fi first
#define se second
#define fr front()
#define pb push_back
#define t top()
 
#define FOR(i , x , n) for(int i = x ; i <= n ; ++i)
#define REP(i , n) for(int i = 0 ; i < n ; ++i)
#define FORD(i , x , n) for(int i = x ; i >= n ; --i)
 
#define oo 1e18
#define eps 1e-8
#define pow poww
#define int long long
 
const int N = 1e5 + 5;
int n , m , s , e , u , v;
int S[N] , E[N] , V[N] , U[N] , A[N];
vector < int > C;
vector < ii > g[N];
priority_queue < ii , vector < ii > , greater < ii > > q;
 
void dijk(int u , int dist[])
{
    FOR(i , 1 , n)
        dist[i] = oo;
    dist[u] = 0;
    q.push(ii(0 , u));
    while(!q.empty())
    {
        int val = q.t.fi;
        int u = q.t.se;
        q.pop();
        if(val > dist[u])
            continue;
        REP(s , g[u].size())
        {
            int v = g[u][s].fi;
            int cost = g[u][s].se;
            if(dist[v] > dist[u] + cost)
                q.push(ii(dist[v] = dist[u] + cost , v));
        }
    }
}
 
main()
{
    //freopen("E.inp","r",stdin);
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> m;
    cin >> s >> e;
    cin >> u >> v;
    FOR(i , 1 , m)
    {
        int u , v , c;
        cin >> u >> v >> c;
        g[u].pb(ii(v , c));
        g[v].pb(ii(u , c));
    }
    dijk(s , S);
    dijk(e , E);
    dijk(u , U);
    dijk(v , V);
 
    int cnt = 0;
    int res = U[v];
    FOR(i , 1 , n)
        if(V[i] <= V[u])
            C.pb(i);
    //cout << V[1] << " " << V[6] << endl;
 
    REP(s , C.size())
    {
        int a = C[s];
        cnt += n;
        dijk(a , A);
        FOR(b , 1 , n)
        {
            if(S[a] + A[b] + E[b] == S[e] || S[b] + A[b] + E[a] == S[e])
                res  = min(res , min(U[a] +  V[b] , U[b] + V[a]));
        }
        if(cnt >= 2000000)
            break;
    }
    cout << res;
}

Compilation message (stderr)

commuter_pass.cpp: In function 'void dijk(long long int, long long int*)':
commuter_pass.cpp:16:38: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   16 | #define REP(i , n) for(int i = 0 ; i < n ; ++i)
......
   44 |         REP(s , g[u].size())
      |             ~~~~~~~~~~~~~~~           
commuter_pass.cpp:44:9: note: in expansion of macro 'REP'
   44 |         REP(s , g[u].size())
      |         ^~~
commuter_pass.cpp: At global scope:
commuter_pass.cpp:54:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   54 | main()
      |      ^
commuter_pass.cpp: In function 'int main()':
commuter_pass.cpp:16:38: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   16 | #define REP(i , n) for(int i = 0 ; i < n ; ++i)
......
   81 |     REP(s , C.size())
      |         ~~~~~~~~~~~~                  
commuter_pass.cpp:81:5: note: in expansion of macro 'REP'
   81 |     REP(s , C.size())
      |     ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...