답안 #45634

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
45634 2018-04-15T16:53:59 Z reality Commuter Pass (JOI18_commuter_pass) C++17
31 / 100
818 ms 60528 KB
#include "bits/stdc++.h"
using namespace std;
#define fi first
#define se second
#define ll long long
#define dbg(v) cerr<<#v<<" = "<<v<<'\n'
#define vi vector<int>
#define vl vector <ll>
#define pii pair<int,int>
#define mp make_pair
#define db long double
#define pb push_back
#define all(s) s.begin(),s.end()
template < class T > T smin(T &a,T b) {if (a > b) a = b;return a;}
template < class T > T smax(T &a,T b) {if (a < b) a = b;return a;}
const int N = (int)(1e6) + 5;
ll D1[N];
ll D2[N];
ll D3[N];
ll D4[N];
vector < pii > g[N];
int n;
void Go(ll D[],int S) {
	for (int i = 1;i <= n;++i)
		D[i] = 1e18;
	D[S] = 0;
	priority_queue < pair < ll , int > , vector < pair < ll , int > > , greater < pair < ll , int > > > Q;
	Q.push(mp(0,S));
	while (!Q.empty()) {
		const ll cost = Q.top().fi;
		const int node = Q.top().se;
		Q.pop();
		if (cost != D[node])
			continue;
		for (auto it : g[node])
			if (D[it.fi] > D[node] + it.se)
				D[it.fi] = D[node] + it.se,Q.push(mp(D[it.fi],it.fi));
	}
}
ll ans = 1e18;
vi order;
vi G[N];
int was[N];
void go(ll d1[],ll d2[]) {
	static ll D[N];
	for (int i = 1;i <= n;++i)
		D[i] = d1[i];
	for (auto u : order)
		for (auto v : G[u])
			if (d1[v] < d1[u])
				smin(D[u],D[v]);
	for (int i = 1;i <= n;++i)
		smin(ans,D[i] + d2[i]);
}
int main(void)
{
    int m;
    int S,T,U,V;
    cin>>n>>m>>S>>T>>U>>V;
    while (m --) {
    	int a,b,c;
    	cin>>a>>b>>c;
    	g[a].pb(mp(b,c));
    	g[b].pb(mp(a,c));
    }
    Go(D1,S);
    Go(D2,T);
    Go(D3,U);
    Go(D4,V);
    queue < int > q;
    q.push(S);
    was[S] = 1;
    const ll dist = D1[T];
    for (int i = 1;i <= n;++i) {
    	for (auto it : g[i])
    		if (D1[i] + it.se + D2[it.fi] == dist || D1[it.fi] + it.se + D2[i] == dist)
    			G[i].pb(it.fi);
    }
    while (!q.empty()) {
    	int node = q.front();
    	q.pop();
    	order.pb(node);
    	for (auto it : G[node])
    		if (D1[it] > D1[node] && !was[it])
    			was[it] = 1,q.push(it);
    }
    ans = D3[V];
    go(D3,D4);
	go(D4,D3);
	reverse(all(order));
	go(D3,D4);
	go(D4,D3);
	cout << ans << '\n';
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 670 ms 59836 KB Output is correct
2 Correct 818 ms 59836 KB Output is correct
3 Correct 687 ms 60288 KB Output is correct
4 Correct 615 ms 60288 KB Output is correct
5 Correct 629 ms 60288 KB Output is correct
6 Correct 682 ms 60288 KB Output is correct
7 Correct 648 ms 60288 KB Output is correct
8 Correct 638 ms 60288 KB Output is correct
9 Correct 632 ms 60288 KB Output is correct
10 Correct 581 ms 60288 KB Output is correct
11 Correct 312 ms 60288 KB Output is correct
12 Correct 636 ms 60288 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 624 ms 60288 KB Output is correct
2 Correct 636 ms 60288 KB Output is correct
3 Correct 634 ms 60288 KB Output is correct
4 Correct 643 ms 60288 KB Output is correct
5 Correct 643 ms 60288 KB Output is correct
6 Correct 662 ms 60288 KB Output is correct
7 Correct 697 ms 60528 KB Output is correct
8 Correct 642 ms 60528 KB Output is correct
9 Correct 686 ms 60528 KB Output is correct
10 Correct 638 ms 60528 KB Output is correct
11 Correct 321 ms 60528 KB Output is correct
12 Correct 661 ms 60528 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 68 ms 60528 KB Output is correct
2 Correct 44 ms 60528 KB Output is correct
3 Incorrect 42 ms 60528 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 670 ms 59836 KB Output is correct
2 Correct 818 ms 59836 KB Output is correct
3 Correct 687 ms 60288 KB Output is correct
4 Correct 615 ms 60288 KB Output is correct
5 Correct 629 ms 60288 KB Output is correct
6 Correct 682 ms 60288 KB Output is correct
7 Correct 648 ms 60288 KB Output is correct
8 Correct 638 ms 60288 KB Output is correct
9 Correct 632 ms 60288 KB Output is correct
10 Correct 581 ms 60288 KB Output is correct
11 Correct 312 ms 60288 KB Output is correct
12 Correct 636 ms 60288 KB Output is correct
13 Correct 624 ms 60288 KB Output is correct
14 Correct 636 ms 60288 KB Output is correct
15 Correct 634 ms 60288 KB Output is correct
16 Correct 643 ms 60288 KB Output is correct
17 Correct 643 ms 60288 KB Output is correct
18 Correct 662 ms 60288 KB Output is correct
19 Correct 697 ms 60528 KB Output is correct
20 Correct 642 ms 60528 KB Output is correct
21 Correct 686 ms 60528 KB Output is correct
22 Correct 638 ms 60528 KB Output is correct
23 Correct 321 ms 60528 KB Output is correct
24 Correct 661 ms 60528 KB Output is correct
25 Correct 68 ms 60528 KB Output is correct
26 Correct 44 ms 60528 KB Output is correct
27 Incorrect 42 ms 60528 KB Output isn't correct
28 Halted 0 ms 0 KB -