Submission #668570

#TimeUsernameProblemLanguageResultExecution timeMemory
668570RambaXGorilla007 (CEOI14_007)C++17
100 / 100
301 ms16444 KiB
#include<cstdio> #include<algorithm> #include<utility> #include<vector> #include<queue> using namespace std; typedef pair <int,int> ii; int N, M, S, D, A, B; vector <int> adj[200010]; queue <ii> near; int dists[2][200010] = {}; bool vis[200010] = {}; void bfs(int X, int n){ near.push(ii(X, 0)); while(!near.empty()){ int node = near.front().first; int dist = near.front().second; near.pop(); if(dists[n][node]) continue; dists[n][node] = dist; for(int i : adj[node]){ near.push(ii(i, dist + 1)); } } } int both(int X){ int most; near.push(ii(X, 0)); while(!near.empty()){ int node = near.front().first; int dist = near.front().second; near.pop(); if(vis[node] || dists[0][X] - dists[0][node] != dist || dists[1][X] - dists[1][node] != dist) continue; vis[node] = true; most = dist; for(int i : adj[node]){ near.push(ii(i, dist + 1)); } } fill(vis, vis + 200010, false); return most; } int main(){ scanf("%d%d%d%d%d%d",&N,&M,&S,&D,&A,&B); for(int i = 0;i < M;i++){ int a, b; scanf("%d%d",&a,&b); adj[a].push_back(b); adj[b].push_back(a); } bfs(A, 0); bfs(B, 1); int diff1 = dists[0][D] - dists[0][S]; int diff2 = dists[1][D] - dists[1][S]; int ideal = max(min(diff1, diff2), -1); if(diff1 != diff2) printf("%d",ideal); else printf("%d",ideal - (ideal + both(S) < both(D))); }

Compilation message (stderr)

007.cpp: In function 'int main()':
007.cpp:44:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   44 |     scanf("%d%d%d%d%d%d",&N,&M,&S,&D,&A,&B);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
007.cpp:47:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   47 |         scanf("%d%d",&a,&b);
      |         ~~~~~^~~~~~~~~~~~~~
007.cpp: In function 'int both(int)':
007.cpp:41:12: warning: 'most' may be used uninitialized in this function [-Wmaybe-uninitialized]
   41 |     return most;
      |            ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...