제출 #851855

#제출 시각아이디문제언어결과실행 시간메모리
851855themaver1cksCommuter Pass (JOI18_commuter_pass)C++14
0 / 100
563 ms262144 KiB
/** 。∠(*・ω・)っ ⌒ 由 ~ (( ,,・з・,, )) _Π_____。 /______/~\ | 田田|門| **/ #include <bits/stdc++.h> using namespace std; #define fori(i, l, r) for(int (i) = (l); i < (r); ++i) #define forie(i, l, r) for (int (i) = (l); i <= (r); ++i) #define ford(i, l, r) for (int (i) = (l); i > (r); --i) #define forde(i, l, r) for (int (i) = (l); i >= (r); --i) //#define int long long //#define i_inf INT_MAX #define inf LLONG_MAX #define ii pair<int,int> #define fi first #define se second #define gcd __gcd #define lcm(x,y) x * y/ gcd(x,y) #define pb push_back #define sz size #define all(x) begin(x), end(x) #define fastio ios_base::sync_with_stdio(0); cin.tie(nullptr); #define el "\n" #define sp " " // int dr[] = {-1, 0, 1, 0}; int dc[] = {0, 1, 0, -1}; // var declare const int maxn = 1e5 + 3; const int i_inf = 1e9; int n, m, s, t, x, y; // ds declare vector <ii> adj[maxn]; vector<vector<int>> path; vector <int> p[maxn]; // void dijkstra() { priority_queue <ii, vector<ii>, greater<ii>> pq; pq.push({0, s}); vector <int> d(n+3, i_inf); d[s] = 0; while (pq.sz()) { int e = pq.top().fi; int u = pq.top().se; pq.pop(); if (e != d[u]) continue; for (ii edge: adj[u]) { int v = edge.fi, w = edge.se; if (d[v] > d[u] + w) { p[v].clear(); p[v].pb(u); d[v] = d[u] + w; pq.push({d[v], v}); } else if (d[v] == d[u] + w) p[v].pb(u); } } } // void dewey(vector<int>& trace, int node) { if (node == s) { path.pb(trace); return; } for (int v: p[node]) { trace.pb(v); dewey(trace, v); trace.pop_back(); } } // void solve() { cin >> n >> m >> s >> t >> x >> y; forie(i, 1, m) { int u, v, w; cin >> u >> v >> w; adj[u].pb({v, w}); adj[v].pb({u, w}); } dijkstra(); vector <int> trace; trace.pb(t); for (int v: p[t]) { trace.pb(v); dewey(trace, v); trace.pop_back(); } int ans = i_inf; for (vector<int>& a: path) { reverse(a.begin(), a.end()); fori(i, 1, a.sz()) { int u = a[i-1], v = a[i]; adj[u].pb({v, 0}); adj[v].pb({u, 0}); } priority_queue <ii, vector<ii>, greater<ii>> pq; vector <int> dis(n+3, i_inf); dis[x] = 0; pq.push({0, x}); while (pq.sz()) { int e = pq.top().fi; int u = pq.top().se; pq.pop(); if (e != dis[u]) continue; for (int i = adj[u].sz()-1; i >= 0; --i) { int v = adj[u][i].fi, w = adj[u][i].se; if (dis[v] > dis[u] + w) { dis[v] = dis[u] + w; pq.push({dis[v], v}); } } } ans = min(ans, dis[y]); fori(i, 1, a.sz()) { adj[a[i-1]].pop_back(); adj[a[i]].pop_back(); } } cout << ans; } // void multi_test() { int t; cin >> t; while (t--) solve(); } // int32_t main() { fastio; solve(); return 0; } /** 5 7 1 3 4 5 1 2 10 1 3 30 1 4 15 2 3 10 4 3 5 3 5 10 4 5 12 **/

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

commuter_pass.cpp: In function 'void solve()':
commuter_pass.cpp:13:33: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   13 | #define forie(i, l, r) for (int (i) = (l); i <= (r); ++i)
      |                                 ^
commuter_pass.cpp:87:2: note: in expansion of macro 'forie'
   87 |  forie(i, 1, m)
      |  ^~~~~
commuter_pass.cpp:12:31: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   12 | #define fori(i, l, r) for(int (i) = (l); i < (r); ++i)
      |                               ^
commuter_pass.cpp:106:9: note: in expansion of macro 'fori'
  106 |         fori(i, 1, a.sz())
      |         ^~~~
commuter_pass.cpp:12:44: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   12 | #define fori(i, l, r) for(int (i) = (l); i < (r); ++i)
      |                                            ^
commuter_pass.cpp:106:9: note: in expansion of macro 'fori'
  106 |         fori(i, 1, a.sz())
      |         ^~~~
commuter_pass.cpp:12:31: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   12 | #define fori(i, l, r) for(int (i) = (l); i < (r); ++i)
      |                               ^
commuter_pass.cpp:133:9: note: in expansion of macro 'fori'
  133 |         fori(i, 1, a.sz())
      |         ^~~~
commuter_pass.cpp:12:44: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   12 | #define fori(i, l, r) for(int (i) = (l); i < (r); ++i)
      |                                            ^
commuter_pass.cpp:133:9: note: in expansion of macro 'fori'
  133 |         fori(i, 1, a.sz())
      |         ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...