Submission #865919

# Submission time Handle Problem Language Result Execution time Memory
865919 2023-10-25T03:26:05 Z Requiem Commuter Pass (JOI18_commuter_pass) C++17
100 / 100
280 ms 54036 KB
#include<bits/stdc++.h>
#define int long long
#define pb push_back
#define fast ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
#define MOD 1000000007
#define INF 1e18
#define fi first
#define se second
#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 sz(a) ((int)(a).size())
#define endl '\n'
#define pi 3.14159265359
#define TASKNAME "bus"
template<typename T> bool maximize(T &res, const T &val) { if (res < val){ res = val; return true; }; return false; }
template<typename T> bool minimize(T &res, const T &val) { if (res > val){ res = val; return true; }; return false; }
using namespace std;
typedef pair<int,int> ii;
typedef pair<int,ii> iii;
typedef vector<int> vi;
const int MAXN = 2e5 + 9;
int n,m,s,t,u,v,distfroms[MAXN],distfromu[MAXN],distfromv[MAXN],degree[MAXN];
vector<ii> g[MAXN];
set<int> traceback[MAXN];
vector<int> shortestpath[MAXN];
void dijkstra(int start,int dist[],bool kt){
    for(int i=1;i<=n;i++){
        dist[i] = INF;
    }
    priority_queue<ii,vector<ii>,greater<ii>> pq;
    dist[start] = 0;
    pq.push({0,start});
    while(!pq.empty()){
        int u = pq.top().se;
        int du = pq.top().fi;
        pq.pop();
        if (du > dist[u]) continue;
        for(auto pt: g[u]){
            int v = pt.fi;
            int w = pt.se;
            if (dist[v] > dist[u] + w){
                dist[v] = dist[u] + w;
                pq.push({dist[v],v});
                if (kt) traceback[v].clear();
                if (kt) traceback[v].insert(u);
            }
            else if (dist[v] == dist[u] + w){
                if (kt) traceback[v].insert(u);
            }
        }
    }
}
int best1[MAXN],best2[MAXN];
bool visited[MAXN];
main()
{
    fast;
  //  freopen(TASKNAME".inp","r",stdin);
  //  freopen(TASKNAME".out","w",stdout);
    cin>>n>>m;
    cin>>s>>t;
    cin>>u>>v;
    for(int i=1;i<=m;i++){
        int u,v,w;
        cin>>u>>v>>w;
        g[u].pb({v,w});
        g[v].pb({u,w});
    }
    dijkstra(s,distfroms,1);
    dijkstra(u,distfromu,0);
    dijkstra(v,distfromv,0);
    queue<int> q;
    q.push(t);
    visited[t] = true;
//    for(int i=1;i<=n;i++){
//        for(auto x: traceback[i]){
//            cout<<x<<' ';
//        }
//        cout<<endl;
//    }
//    cout<<endl;
    while (!q.empty()){
        int u = q.front();
        q.pop();
//        cout<<u<<endl;
        for(auto v: traceback[u]){
            shortestpath[v].pb(u);
//            cout<<v<<' '<<u<<endl;
            degree[u]++;
            if (!visited[v]){
                visited[v] = true;
                q.push(v);
            }
        }
    }
    q.push(s);
    int ans = distfromu[v];
    memset(best1,0x3f,sizeof(best1));
    memset(best2,0x3f,sizeof(best2));
    memset(visited,false,sizeof(visited));
    while(!q.empty()){
        int u = q.front();
        q.pop();
        best1[u] = min(best1[u], distfromu[u]);
        best2[u] = min(best2[u], distfromv[u]);
//        cout<<u<<' '<<best1[u]<<' '<<best2[u]<<endl;

        ans = min(ans, best1[u] + distfromv[u]);
        ans = min(ans, best2[u] + distfromu[u]);
        for(auto v: shortestpath[u]){
            degree[v]--;
            best1[v] = min(best1[v],best1[u]);
            best2[v] = min(best2[v],best2[u]);
            if (degree[v] == 0){
                q.push(v);
            }
        }
    }

    cout<<ans<<endl;


}

Compilation message

commuter_pass.cpp:55:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   55 | main()
      | ^~~~
# Verdict Execution time Memory Grader output
1 Correct 280 ms 47980 KB Output is correct
2 Correct 226 ms 47568 KB Output is correct
3 Correct 271 ms 47936 KB Output is correct
4 Correct 221 ms 49756 KB Output is correct
5 Correct 248 ms 50340 KB Output is correct
6 Correct 253 ms 47320 KB Output is correct
7 Correct 218 ms 48560 KB Output is correct
8 Correct 260 ms 48600 KB Output is correct
9 Correct 232 ms 46788 KB Output is correct
10 Correct 178 ms 47368 KB Output is correct
11 Correct 83 ms 41044 KB Output is correct
12 Correct 224 ms 46680 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 215 ms 46632 KB Output is correct
2 Correct 235 ms 46716 KB Output is correct
3 Correct 216 ms 46524 KB Output is correct
4 Correct 213 ms 46592 KB Output is correct
5 Correct 233 ms 47004 KB Output is correct
6 Correct 219 ms 47836 KB Output is correct
7 Correct 230 ms 47876 KB Output is correct
8 Correct 226 ms 46940 KB Output is correct
9 Correct 220 ms 46756 KB Output is correct
10 Correct 218 ms 46456 KB Output is correct
11 Correct 95 ms 41596 KB Output is correct
12 Correct 221 ms 47884 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 12 ms 29532 KB Output is correct
2 Correct 5 ms 27140 KB Output is correct
3 Correct 6 ms 27232 KB Output is correct
4 Correct 19 ms 31592 KB Output is correct
5 Correct 10 ms 29020 KB Output is correct
6 Correct 6 ms 27192 KB Output is correct
7 Correct 6 ms 27480 KB Output is correct
8 Correct 6 ms 27400 KB Output is correct
9 Correct 6 ms 27228 KB Output is correct
10 Correct 10 ms 29020 KB Output is correct
11 Correct 5 ms 27228 KB Output is correct
12 Correct 6 ms 27228 KB Output is correct
13 Correct 5 ms 27240 KB Output is correct
14 Correct 5 ms 27240 KB Output is correct
15 Correct 6 ms 27240 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 280 ms 47980 KB Output is correct
2 Correct 226 ms 47568 KB Output is correct
3 Correct 271 ms 47936 KB Output is correct
4 Correct 221 ms 49756 KB Output is correct
5 Correct 248 ms 50340 KB Output is correct
6 Correct 253 ms 47320 KB Output is correct
7 Correct 218 ms 48560 KB Output is correct
8 Correct 260 ms 48600 KB Output is correct
9 Correct 232 ms 46788 KB Output is correct
10 Correct 178 ms 47368 KB Output is correct
11 Correct 83 ms 41044 KB Output is correct
12 Correct 224 ms 46680 KB Output is correct
13 Correct 215 ms 46632 KB Output is correct
14 Correct 235 ms 46716 KB Output is correct
15 Correct 216 ms 46524 KB Output is correct
16 Correct 213 ms 46592 KB Output is correct
17 Correct 233 ms 47004 KB Output is correct
18 Correct 219 ms 47836 KB Output is correct
19 Correct 230 ms 47876 KB Output is correct
20 Correct 226 ms 46940 KB Output is correct
21 Correct 220 ms 46756 KB Output is correct
22 Correct 218 ms 46456 KB Output is correct
23 Correct 95 ms 41596 KB Output is correct
24 Correct 221 ms 47884 KB Output is correct
25 Correct 12 ms 29532 KB Output is correct
26 Correct 5 ms 27140 KB Output is correct
27 Correct 6 ms 27232 KB Output is correct
28 Correct 19 ms 31592 KB Output is correct
29 Correct 10 ms 29020 KB Output is correct
30 Correct 6 ms 27192 KB Output is correct
31 Correct 6 ms 27480 KB Output is correct
32 Correct 6 ms 27400 KB Output is correct
33 Correct 6 ms 27228 KB Output is correct
34 Correct 10 ms 29020 KB Output is correct
35 Correct 5 ms 27228 KB Output is correct
36 Correct 6 ms 27228 KB Output is correct
37 Correct 5 ms 27240 KB Output is correct
38 Correct 5 ms 27240 KB Output is correct
39 Correct 6 ms 27240 KB Output is correct
40 Correct 174 ms 47612 KB Output is correct
41 Correct 186 ms 46692 KB Output is correct
42 Correct 182 ms 46704 KB Output is correct
43 Correct 88 ms 42836 KB Output is correct
44 Correct 85 ms 42836 KB Output is correct
45 Correct 249 ms 54036 KB Output is correct
46 Correct 240 ms 53900 KB Output is correct
47 Correct 223 ms 51972 KB Output is correct
48 Correct 118 ms 42324 KB Output is correct
49 Correct 183 ms 51716 KB Output is correct
50 Correct 258 ms 53408 KB Output is correct
51 Correct 277 ms 53908 KB Output is correct