제출 #1359282

#제출 시각아이디문제언어결과실행 시간메모리
1359282itzmanuCommuter Pass (JOI18_commuter_pass)C++20
0 / 100
0 ms516 KiB
#include <bits/stdc++.h>
using namespace std;
 
#define nitro ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define int long long
#define vi vector<int>
#define spc ' '
#define yes "YES"
#define no "NO"
#define endl "\n"
const int inf = 1e18;
const int maxn = 1e5 + 5;
const int mod = 1e9 + 7;
const int logn = 20;

vector<pair<int,int>> adj[maxn], adj2[maxn];

vi dijkstra(int src, int n, vector<pair<int,int>> g[]) {
    vi dist(n+1, inf);
    priority_queue<pair<int,int>, vector<pair<int,int>>, greater<>> pq;
    dist[src] = 0;
    pq.push({0, src});
    while(!pq.empty()) {
        auto [d, u] = pq.top(); pq.pop();
        if(d > dist[u]) continue;
        for(auto [to, w] : g[u]) {
            if(dist[u] + w < dist[to]) {
                dist[to] = dist[u] + w;
                pq.push({dist[to], to});
            }
        }
    }
    return dist;
}

void solve() {
    int n, m; cin >> n >> m;
    int s, t, u, v; cin >> s >> t >> u >> v;

    for(int i = 0; i < m; i++) {
        int a, b, c; cin >> a >> b >> c;
        adj[a].push_back({b, c});
        adj[b].push_back({a, c});
    }

    vi dS = dijkstra(s, n, adj);
    vi dT = dijkstra(t, n, adj);

    for(int a = 1; a <= n; a++) {
        for(auto [b, c] : adj[a]) {
            int w = c;
            if(dS[a] + c + dT[b] == dS[t] || dS[b] + c + dT[a] == dS[t])
                w = 0;
            adj2[a].push_back({b, w});
        }
    }

    vi dU = dijkstra(u, n, adj2);
    cout << dU[v];
}
 
signed main() {
	freopen("mootube.in", "r", stdin);
	freopen("mootube.out", "w", stdout);
	nitro
	int t = 1;
	// cin >> t;
	for(int i = 1; i <= t; i++) {
		// cout << "Case #" << i << ": ";
		solve();
		cout << endl;
	}
	return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

commuter_pass.cpp: In function 'int main()':
commuter_pass.cpp:63:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   63 |         freopen("mootube.in", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
commuter_pass.cpp:64:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   64 |         freopen("mootube.out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…