답안 #670825

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
670825 2022-12-10T18:44:13 Z dattranxxx Relay Marathon (NOI20_relaymarathon) C++11
25 / 100
1391 ms 174444 KB
#include<bits/stdc++.h>
using namespace std;
using ll = long long;

#define int ll

const int N = 1e5 + 5, inf = 1e16;
vector<pair<int, int>> adj[N];
int special[N];
int n, m, k;

priority_queue<pair<int, int>> q;
int dis[N], src[N];

int dijkstra(int s, int t) {
  memset(dis, 0x3f, sizeof(dis));
  q.emplace(0, s); dis[s] = 0;
  while (!q.empty()) {
    int d, u; tie(d, u) = q.top(); q.pop();
    if (-d != dis[u]) continue;
    if (special[u] && u != s && u != t) return dis[u];
    for (auto& p : adj[u]) {
      int v, w; tie(v, w) = p;
      if (dis[u] + w < dis[v]) 
        dis[v] = dis[u] + w, q.emplace(-dis[v], v);
    }
  }
  return inf;
}

tuple<int, int, int> dijkstra0() {
  memset(dis, 0x3f, sizeof(dis));
  for (int v = 0; v < n; ++v) if (special[v])
    dis[v] = 0, src[v] = v, q.emplace(0, v);
  while (!q.empty()) {
    int d, u; tie(d, u) = q.top(); q.pop();
    if (-d != dis[u]) continue;
    for (auto& p : adj[u]) {
      int v, w; tie(v, w) = p;
      if (dis[u] + w < dis[v]) 
        dis[v] = dis[u] + w, src[v] = src[u], q.emplace(-dis[v], v);
    }
  }
  int res = inf, s = -1, t = -1;
  for (int u = 0; u < n; ++u) for (auto& p : adj[u]) {
    int v, w; tie(v, w) = p;
    if (src[u] != src[v] && dis[u] + dis[v] + w < res)
      res = dis[u] + dis[v] + w, s = src[u], t = src[v];
  }
  assert(s != -1 & t != -1);
  return make_tuple(res, s, t);
}

signed main() {
  cin.tie(0)->sync_with_stdio(0); cout.tie(0);
  cin >> n >> m >> k;
  for (int i = 0, u, v, w; i < m; ++i)
    cin >> u >> v >> w, u--, v--,
    adj[u].emplace_back(v, w),
    adj[v].emplace_back(u, w);
    
  for (int i = 0, v; i < k; ++i)
    cin >> v, v--, special[v] = 1;
  
    
  int val1, val2, s, t, tmp1, tmp2;
  tie(val1, s, t) = dijkstra0(); special[s] = special[t] = 0;
  tie(val2, tmp1, tmp2) = dijkstra0();
  cout << min(val1 + val2, dijkstra(s, t) + dijkstra(t, s));
	return 0;
}

Compilation message

In file included from /usr/include/c++/10/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
                 from RelayMarathon.cpp:1:
RelayMarathon.cpp: In function 'std::tuple<long long int, long long int, long long int> dijkstra0()':
RelayMarathon.cpp:50:12: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
   50 |   assert(s != -1 & t != -1);
      |          ~~^~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 3412 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 3412 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 64 ms 9356 KB Output is correct
2 Correct 7 ms 4180 KB Output is correct
3 Correct 1284 ms 158020 KB Output is correct
4 Correct 607 ms 74156 KB Output is correct
5 Correct 161 ms 16968 KB Output is correct
6 Correct 130 ms 13956 KB Output is correct
7 Correct 188 ms 18472 KB Output is correct
8 Correct 60 ms 9480 KB Output is correct
9 Correct 118 ms 13128 KB Output is correct
10 Correct 88 ms 10736 KB Output is correct
11 Correct 1281 ms 167064 KB Output is correct
12 Correct 93 ms 11372 KB Output is correct
13 Correct 384 ms 45556 KB Output is correct
14 Correct 180 ms 19396 KB Output is correct
15 Correct 1229 ms 163772 KB Output is correct
16 Correct 43 ms 8652 KB Output is correct
17 Correct 905 ms 117100 KB Output is correct
18 Correct 7 ms 4612 KB Output is correct
19 Correct 1391 ms 174444 KB Output is correct
20 Correct 170 ms 18104 KB Output is correct
21 Correct 145 ms 16064 KB Output is correct
22 Correct 79 ms 10664 KB Output is correct
23 Correct 20 ms 7508 KB Output is correct
24 Correct 879 ms 129660 KB Output is correct
25 Correct 115 ms 13284 KB Output is correct
26 Correct 77 ms 9484 KB Output is correct
27 Correct 117 ms 11944 KB Output is correct
28 Correct 24 ms 5832 KB Output is correct
29 Correct 175 ms 18200 KB Output is correct
30 Correct 320 ms 35576 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 3412 KB Output isn't correct
2 Halted 0 ms 0 KB -