Submission #1262873

#TimeUsernameProblemLanguageResultExecution timeMemory
1262873bluevioletCommuter Pass (JOI18_commuter_pass)C++20
100 / 100
187 ms30408 KiB
#include     		<bits/stdc++.h>
	
#define             ll   long long
#define            pll   pair<ll, ll>
#define            pii   pair<int, int>
#define          io(x)   if (fopen(x".inp","r")) {freopen(x".inp","r",stdin),freopen(x".out","w",stdout);}
#define      mem(c, x)   memset(c, x, sizeof(c))
#define         all(c)   c.begin(), c.end()
#define       bit(i,j)   ((i >> j) & 1)
#define             pb   push_back
#define             se   second     
#define             fi   first
#define             el   '\n'
using namespace std;  

template<class T> bool   maximize(T &a, const T &b) { return (a < b ? a = b, 1 : 0); }
template<class T> bool   minimize(T &a, const T &b) { return (a > b ? a = b, 1 : 0); }

int dx[8] = {0, 1, 0,-1, 1, 1,-1,-1};
int dy[8] = {1, 0,-1, 0, 1,-1,-1, 1};
const int  maxn  = 2e5 + 2;
const int  Inf   = 2e9 + 7;
const ll   Infll = 1e18 + 9;
const ll   Mod   = 1e9 + 7;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
ll disU[maxn], disV[maxn], disT[maxn], disS[maxn], dp[maxn], dp2[maxn];
int U, V, S, T, n, m;
vector<pll> adj[maxn];
vector<int> bel[maxn], topo;
bool vst[maxn];

void dijkstra(int source, ll dis[]) {
	for (int i=1; i<=n; i++) dis[i] = Infll;
	dis[source] = 0;
	priority_queue<pll, vector<pll>, greater<pll>> q;
	q.push({0, source});
	while (q.size()) {
		ll kc = q.top().fi, u = q.top().se; q.pop();
		if (kc > dis[u]) continue;
		for (auto v : adj[u]) {
			if (minimize(dis[v.fi], dis[u] + v.se)) {
				q.push({dis[v.fi], v.fi});
			}
		}
	}
}

void dfs(int u) {
	vst[u] = 1;
	for (int v : bel[u]) {
		if (vst[v]) continue;
		dfs(v);
	}
	topo.pb(u);
}

void newGraph() {
	for (int u=1; u<=n; u++) {
		for (auto v : adj[u])
			if (disS[u] + v.se + disT[v.fi] == disS[T]) {
				bel[u].pb(v.fi);
			}
	}
	for (int i=1; i<=n; i++) {
		if (!vst[i]) {
			dfs(i);
		}
	}
}

void solve() {
	cin >> n >> m >> S >> T >> U >> V;
	for (int i=1; i<=m; i++) {
		int x,y,z; cin >> x >> y >> z;
		adj[x].pb({y, z});
		adj[y].pb({x, z});
	}

	dijkstra(S, disS);
	dijkstra(T, disT);
	dijkstra(U, disU);
	dijkstra(V, disV);


	newGraph();	
	reverse(all(topo));
	for (int i=1; i<=n; i++) dp[i] = dp2[i] = Infll;
	dp[S] = disV[S];
	dp2[S] = disU[S];


	for (int u : topo) {
		for (int v : bel[u]) {
			minimize(dp[v], min(dp[u], disV[v]));
			minimize(dp2[v], min(dp2[u], disU[v]));
		}
	}

	ll res = disU[V];
	for (int i=1; i<=n; i++) {
		minimize(res, disU[i] + dp[i]);
		minimize(res, disV[i] + dp2[i]);
	}
	cout << res;
}


signed main() 
{
    ios_base::sync_with_stdio(false);  cin.tie(0); cout.tie(0); 
    io("task"); 

    solve();
    
    return (0 ^ 0);
}

Compilation message (stderr)

commuter_pass.cpp: In function 'int main()':
commuter_pass.cpp:6:58: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    6 | #define          io(x)   if (fopen(x".inp","r")) {freopen(x".inp","r",stdin),freopen(x".out","w",stdout);}
      |                                                   ~~~~~~~^~~~~~~~~~~~~~~~~~~
commuter_pass.cpp:111:5: note: in expansion of macro 'io'
  111 |     io("task");
      |     ^~
commuter_pass.cpp:6:85: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    6 | #define          io(x)   if (fopen(x".inp","r")) {freopen(x".inp","r",stdin),freopen(x".out","w",stdout);}
      |                                                                              ~~~~~~~^~~~~~~~~~~~~~~~~~~~
commuter_pass.cpp:111:5: note: in expansion of macro 'io'
  111 |     io("task");
      |     ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...