Submission #700183

#TimeUsernameProblemLanguageResultExecution timeMemory
700183berrCommuter Pass (JOI18_commuter_pass)C++17
100 / 100
408 ms36080 KiB
// 1 #include <bits/stdc++.h> using namespace std; #define int long long const int N = 1e5+37; vector<array<int, 2>> adj[N]; vector<int> ds, dt, dv, du, adj2[N]; vector<array<int, 2>> a1(N), a2(N); vector<int> d(int x){ vector<int> dist(N, 1e18); dist[x] = 0; priority_queue<array<int, 2>> q; q.push({0, x}); while (q.size()){ int u = -q.top()[0], v = q.top()[1]; q.pop(); for (auto i: adj[v]){ if(dist[i[0]] > u+i[1]){ dist[i[0]] = u + i[1]; q.push({-dist[i[0]], i[0]}); } } } return dist; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n, m; cin >> n >> m; int s, t, u, v; cin >> s >> t >> u >> v; s--; t--; u--; v--; vector<array<int, 3>> e; for (int i = 0; i < m; i++){ int x, y, z; cin >> x >> y >> z; x--; y--; adj[x].push_back({y, z}); adj[y].push_back({x, z}); e.push_back({x, y, z}); } ds=d(s), dt=d(t), du=d(u), dv=d(v); for (auto i: e){ if(i[2] + ds[i[0]] + dt[i[1]] == ds[t]) adj2[i[0]].push_back(i[1]), adj2[i[1]].push_back(i[0]); if(i[2] + ds[i[1]] + dt[i[0]] == ds[t]) adj2[i[0]].push_back(i[1]), adj2[i[1]].push_back(i[0]); } int a=1e18; for (int i = 0; i < n; i++){ a1[i] = {a, a}; a2[i] = {a, a}; } queue<int> q; q.push(s); vector<int> vis(n); vis[s]=1; while (q.size()){ int c=q.front(); q.pop(); a1[c][0] = min(a1[c][0], dv[c]); a1[c][1] = min(a1[c][1], du[c]); for (auto i: adj2[c]){ if(ds[i] > ds[c]){ a1[i][0] = min(a1[i][0], a1[c][0]); a1[i][1] = min(a1[i][1], a1[c][1]); if(vis[i]==0) q.push(i), vis[i]=1; } } } q.push(t); for(int i=0; i<n; i++) vis[i]=0; vis[t]=1; while (q.size()){ int c=q.front(); q.pop(); a2[c][0] = min(a2[c][0], dv[c]); a2[c][1] = min(a2[c][1], du[c]); for (auto i: adj2[c]){ if(dt[i] > dt[c]){ a2[i][0] = min(a2[i][0], a2[c][0]); a2[i][1] = min(a2[i][1], a2[c][1]); if(vis[i]==0) q.push(i), vis[i]=1; } } } int ans=dv[u]; for(int i=0; i<n; i++){ ans = min({a1[i][0] + a2[i][1], a1[i][1] + a2[i][0], ans}); } cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...