Submission #854426

# Submission time Handle Problem Language Result Execution time Memory
854426 2023-09-27T15:14:07 Z nnhzzz Commuter Pass (JOI18_commuter_pass) C++14
100 / 100
248 ms 26484 KB
// cre: Nguyen Ngoc Hung - Train VOI 2024

#include<bits/stdc++.h>

using namespace std;

#define        __nnhzzz__  signed main()
#define          BIT(i,j)  ((i>>j)&1LL)
#define           MASK(i)  (1LL<<i)
#define            ALL(x)  (x).begin(),(x).end()
#define             SZ(x)  (int)(x).size()
#define                fi  first
#define                se  second
#define                ll  long long
#define               ull  unsigned long long
#define                ld  long double
#define                vi  vector<int>
#define               vvi  vector<vi>
#define              vvvi  vector<vvi>
#define               pii  pair<int,int>
#define              vpii  vector<pii>
#define        REP(i,a,b)  for(int i = (a); i<=(b); ++i)
#define       REPD(i,a,b)  for(int i = (a); i>=(b); --i)
#define   REPDIS(i,a,b,c)  for(int i = (a); i<=(b); i+=c)
#define               int  ll
//-------------------------------------------------------------//
const int oo = 1e16,LOG = 20,MAXN = 1e5+7,N = 1e2+3;
const int MOD = 1e9+7,MOD1 = 1e9+207,MOD2 = 1e9+407,MOD3 = 998244353;
//-------------------------------------------------------------//
template<typename T1, typename T2> bool mini(T1 &a, T2 b){if(a>b){a=b;return true;}return false;}
template<typename T1, typename T2> bool maxi(T1 &a, T2 b){if(a<b){a=b;return true;}return false;}

/*
----------------------------------------------------------------
    END OF TEMPLATE
----------------------------------------------------------------
    Nguyen Ngoc Hung - nnhzzz
    Training for VOI24 gold medal
----------------------------------------------------------------
*/

vpii adj[MAXN];

void dijkstra(int s, int* dis){
    priority_queue<pii,vpii,greater<pii>> heap;
    dis[s] = 0; heap.emplace(0,s);
    while(SZ(heap)!=0){
        auto [w1,u] = heap.top(); heap.pop();
        if(dis[u]!=w1) continue;
        for(auto [v,w]:adj[u]){
            if(mini(dis[v],dis[u]+w)){
                heap.emplace(dis[v],v);
            }
        }
    }
}

int dp[3][MAXN],dis[3][MAXN];

int dfs(int u){
    if(dp[0][u]!=oo){
        return oo;
    }
    int res = oo;
    REP(i,0,1) dp[i][u] = dis[i][u];
    for(auto [v,w]:adj[u]){
        if(dis[2][v]==dis[2][u]-w){
            mini(res,dfs(v));
            mini(dp[0][u],dp[0][v]);
            mini(dp[1][u],dp[1][v]);
        }
    }
    mini(res,min(dp[0][u]+dis[1][u],dp[1][u]+dis[0][u]));
    return res;
}

void solve(){
    int n,m,S,T,U,V; cin >> n >> m >> S >> T >> U >> V;
    REP(i,1,m){
        int u,v,w; cin >> u >> v >> w;
        adj[u].emplace_back(v,w);
        adj[v].emplace_back(u,w);
    }
    REP(i,0,2) REP(j,0,n) dp[i][j] = dis[i][j] = oo;
    dijkstra(U,dis[0]);
    dijkstra(V,dis[1]);
    dijkstra(S,dis[2]);
    int res = dis[0][V];
    // cerr << res;
    mini(res,dfs(T));
    cout << res;
}

__nnhzzz__{
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    #define name "test"
    if(fopen(name".inp","r")){
        freopen(name".inp","r",stdin);
        freopen(name".out","w",stdout);
    }
    #define name1 "nnhzzz"
    if(fopen(name1".inp","r")){
        freopen(name1".inp","r",stdin);
        freopen(name1".out","w",stdout);
    }
    int test = 1;
    while(test--){
        solve();
    }
    cerr << "\nTime elapsed: " << 1000*clock()/CLOCKS_PER_SEC << "ms\n";
    return 0;
}

Compilation message

commuter_pass.cpp: In function 'void dijkstra(long long int, long long int*)':
commuter_pass.cpp:48:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   48 |         auto [w1,u] = heap.top(); heap.pop();
      |              ^
commuter_pass.cpp:50:18: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   50 |         for(auto [v,w]:adj[u]){
      |                  ^
commuter_pass.cpp: In function 'long long int dfs(long long int)':
commuter_pass.cpp:66:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   66 |     for(auto [v,w]:adj[u]){
      |              ^
commuter_pass.cpp: In function 'int main()':
commuter_pass.cpp:99:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   99 |         freopen(name".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
commuter_pass.cpp:100:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  100 |         freopen(name".out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
commuter_pass.cpp:104:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  104 |         freopen(name1".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
commuter_pass.cpp:105:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  105 |         freopen(name1".out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 154 ms 20936 KB Output is correct
2 Correct 177 ms 19736 KB Output is correct
3 Correct 196 ms 26484 KB Output is correct
4 Correct 169 ms 23196 KB Output is correct
5 Correct 165 ms 21820 KB Output is correct
6 Correct 188 ms 23564 KB Output is correct
7 Correct 175 ms 21864 KB Output is correct
8 Correct 197 ms 21808 KB Output is correct
9 Correct 190 ms 22460 KB Output is correct
10 Correct 138 ms 22136 KB Output is correct
11 Correct 80 ms 18260 KB Output is correct
12 Correct 171 ms 22476 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 188 ms 20420 KB Output is correct
2 Correct 191 ms 20916 KB Output is correct
3 Correct 181 ms 20364 KB Output is correct
4 Correct 212 ms 20864 KB Output is correct
5 Correct 172 ms 21420 KB Output is correct
6 Correct 173 ms 23360 KB Output is correct
7 Correct 248 ms 24064 KB Output is correct
8 Correct 194 ms 20924 KB Output is correct
9 Correct 176 ms 21460 KB Output is correct
10 Correct 215 ms 20400 KB Output is correct
11 Correct 63 ms 18512 KB Output is correct
12 Correct 222 ms 23740 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 10 ms 8540 KB Output is correct
2 Correct 2 ms 7260 KB Output is correct
3 Correct 2 ms 7260 KB Output is correct
4 Correct 12 ms 10552 KB Output is correct
5 Correct 7 ms 9052 KB Output is correct
6 Correct 2 ms 7384 KB Output is correct
7 Correct 3 ms 7516 KB Output is correct
8 Correct 4 ms 7592 KB Output is correct
9 Correct 2 ms 7512 KB Output is correct
10 Correct 9 ms 9052 KB Output is correct
11 Correct 2 ms 7256 KB Output is correct
12 Correct 2 ms 7260 KB Output is correct
13 Correct 2 ms 7260 KB Output is correct
14 Correct 2 ms 7260 KB Output is correct
15 Correct 2 ms 7260 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 154 ms 20936 KB Output is correct
2 Correct 177 ms 19736 KB Output is correct
3 Correct 196 ms 26484 KB Output is correct
4 Correct 169 ms 23196 KB Output is correct
5 Correct 165 ms 21820 KB Output is correct
6 Correct 188 ms 23564 KB Output is correct
7 Correct 175 ms 21864 KB Output is correct
8 Correct 197 ms 21808 KB Output is correct
9 Correct 190 ms 22460 KB Output is correct
10 Correct 138 ms 22136 KB Output is correct
11 Correct 80 ms 18260 KB Output is correct
12 Correct 171 ms 22476 KB Output is correct
13 Correct 188 ms 20420 KB Output is correct
14 Correct 191 ms 20916 KB Output is correct
15 Correct 181 ms 20364 KB Output is correct
16 Correct 212 ms 20864 KB Output is correct
17 Correct 172 ms 21420 KB Output is correct
18 Correct 173 ms 23360 KB Output is correct
19 Correct 248 ms 24064 KB Output is correct
20 Correct 194 ms 20924 KB Output is correct
21 Correct 176 ms 21460 KB Output is correct
22 Correct 215 ms 20400 KB Output is correct
23 Correct 63 ms 18512 KB Output is correct
24 Correct 222 ms 23740 KB Output is correct
25 Correct 10 ms 8540 KB Output is correct
26 Correct 2 ms 7260 KB Output is correct
27 Correct 2 ms 7260 KB Output is correct
28 Correct 12 ms 10552 KB Output is correct
29 Correct 7 ms 9052 KB Output is correct
30 Correct 2 ms 7384 KB Output is correct
31 Correct 3 ms 7516 KB Output is correct
32 Correct 4 ms 7592 KB Output is correct
33 Correct 2 ms 7512 KB Output is correct
34 Correct 9 ms 9052 KB Output is correct
35 Correct 2 ms 7256 KB Output is correct
36 Correct 2 ms 7260 KB Output is correct
37 Correct 2 ms 7260 KB Output is correct
38 Correct 2 ms 7260 KB Output is correct
39 Correct 2 ms 7260 KB Output is correct
40 Correct 218 ms 23108 KB Output is correct
41 Correct 209 ms 22216 KB Output is correct
42 Correct 196 ms 22248 KB Output is correct
43 Correct 97 ms 18704 KB Output is correct
44 Correct 107 ms 18632 KB Output is correct
45 Correct 203 ms 21440 KB Output is correct
46 Correct 215 ms 21268 KB Output is correct
47 Correct 180 ms 23056 KB Output is correct
48 Correct 99 ms 15384 KB Output is correct
49 Correct 170 ms 22760 KB Output is correct
50 Correct 192 ms 21572 KB Output is correct
51 Correct 242 ms 21492 KB Output is correct