Submission #101143

#TimeUsernameProblemLanguageResultExecution timeMemory
101143E869120007 (CEOI14_007)C++14
100 / 100
648 ms62580 KiB
#include <iostream> #include <vector> #include <algorithm> #include <queue> using namespace std; #pragma warning (disable: 4996) long long N, M, p, q, a, b, dist1[1 << 18], dist2[1 << 18], dist3[1 << 18], dist4[1 << 18], dist[1 << 18]; bool used[1 << 18]; vector<int>X[1 << 18]; vector<pair<int, long long>>G[1 << 18]; vector<long long> dijkstra(int pos) { queue<int>Q; for (int i = 1; i <= N; i++) dist[i] = (1 << 30); dist[pos] = 0; Q.push(pos); while (!Q.empty()) { int pos = Q.front(); Q.pop(); for (int i = 0; i < X[pos].size(); i++) { if (dist[X[pos][i]] > dist[pos] + 1) { dist[X[pos][i]] = dist[pos] + 1; Q.push(X[pos][i]); } } } vector<long long>vec; for (int i = 1; i <= N; i++) vec.push_back(dist[i]); return vec; } vector<long long> dijkstra2(int pos) { priority_queue<pair<long long, int>, vector<pair<long long, int>>, greater<pair<long long, int>>>Q; for (int i = 1; i <= N; i++) dist[i] = (1LL << 60); Q.push(make_pair(0, pos)); dist[pos] = 0; while (!Q.empty()) { int pos = Q.top().second; Q.pop(); for (int i = 0; i < G[pos].size(); i++) { int to = G[pos][i].first; long long cost = G[pos][i].second; if (dist[to] > dist[pos] + cost) { dist[to] = dist[pos] + cost; Q.push(make_pair(dist[to], to)); } } } vector<long long> I; for (int i = 1; i <= N; i++) I.push_back(dist[i]); return I; } int main() { scanf("%d%d", &N, &M); scanf("%d%d%d%d", &p, &q, &a, &b); for (int i = 1; i <= M; i++) { int v1, v2; scanf("%d%d", &v1, &v2); X[v1].push_back(v2); X[v2].push_back(v1); } vector<long long> V1 = dijkstra(a); for (int i = 0; i < V1.size(); i++) dist1[i + 1] = V1[i]; vector<long long> V2 = dijkstra(b); for (int i = 0; i < V2.size(); i++) dist2[i + 1] = V2[i]; vector<long long> V3 = dijkstra(q); for (int i = 0; i < V3.size(); i++) dist3[i + 1] = V3[i]; for (int i = 1; i <= N; i++) { for (int j = 0; j < X[i].size(); j++) { long long cost = 1000001; if (dist1[X[i][j]] == dist2[X[i][j]]) cost = 1000000; G[i].push_back(make_pair(X[i][j], cost)); } } vector<long long> V4 = dijkstra2(a); for (int i = 0; i < V1.size(); i++) dist4[i + 1] = V4[i]; long long minx = (1 << 30); for (int i = 1; i <= N; i++) { if (dist1[i] < dist1[p] || dist2[i] < dist2[p] || (dist1[i] == dist1[p] && dist1[i] == dist2[i] && dist2[i] == dist2[p] && dist4[i] < dist4[p])) { minx = min(minx, dist3[i]); } } cout << minx - 1 << endl; return 0; }

Compilation message (stderr)

007.cpp:6:0: warning: ignoring #pragma warning  [-Wunknown-pragmas]
 #pragma warning (disable: 4996)
 
007.cpp: In function 'std::vector<long long int> dijkstra(int)':
007.cpp:18:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = 0; i < X[pos].size(); i++) {
                   ~~^~~~~~~~~~~~~~~
007.cpp: In function 'std::vector<long long int> dijkstra2(int)':
007.cpp:38:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = 0; i < G[pos].size(); i++) {
                   ~~^~~~~~~~~~~~~~~
007.cpp: In function 'int main()':
007.cpp:53:22: warning: format '%d' expects argument of type 'int*', but argument 2 has type 'long long int*' [-Wformat=]
  scanf("%d%d", &N, &M);
                ~~    ^
007.cpp:53:22: warning: format '%d' expects argument of type 'int*', but argument 3 has type 'long long int*' [-Wformat=]
007.cpp:54:34: warning: format '%d' expects argument of type 'int*', but argument 2 has type 'long long int*' [-Wformat=]
  scanf("%d%d%d%d", &p, &q, &a, &b);
                    ~~            ^
007.cpp:54:34: warning: format '%d' expects argument of type 'int*', but argument 3 has type 'long long int*' [-Wformat=]
007.cpp:54:34: warning: format '%d' expects argument of type 'int*', but argument 4 has type 'long long int*' [-Wformat=]
007.cpp:54:34: warning: format '%d' expects argument of type 'int*', but argument 5 has type 'long long int*' [-Wformat=]
007.cpp:60:56: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  vector<long long> V1 = dijkstra(a); for (int i = 0; i < V1.size(); i++) dist1[i + 1] = V1[i];
                                                      ~~^~~~~~~~~~~
007.cpp:61:56: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  vector<long long> V2 = dijkstra(b); for (int i = 0; i < V2.size(); i++) dist2[i + 1] = V2[i];
                                                      ~~^~~~~~~~~~~
007.cpp:62:56: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  vector<long long> V3 = dijkstra(q); for (int i = 0; i < V3.size(); i++) dist3[i + 1] = V3[i];
                                                      ~~^~~~~~~~~~~
007.cpp:64:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int j = 0; j < X[i].size(); j++) {
                   ~~^~~~~~~~~~~~~
007.cpp:70:57: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  vector<long long> V4 = dijkstra2(a); for (int i = 0; i < V1.size(); i++) dist4[i + 1] = V4[i];
                                                       ~~^~~~~~~~~~~
007.cpp:53:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d", &N, &M);
  ~~~~~^~~~~~~~~~~~~~~~
007.cpp:54:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d%d%d", &p, &q, &a, &b);
  ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
007.cpp:56:20: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   int v1, v2; scanf("%d%d", &v1, &v2);
               ~~~~~^~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...