Submission #65060

#TimeUsernameProblemLanguageResultExecution timeMemory
65060bazsi700007 (CEOI14_007)C++14
100 / 100
550 ms17660 KiB
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); int n,m,s,d,a,b; cin >> n >> m >> s >> d >> a >> b; vector<vector<int> > graph(n+1,vector<int>()); for(int i = 0; i < m; i++) { int x,y; cin >> x >> y; graph[x].push_back(y); graph[y].push_back(x); } vector<bool> wass(n+1,false); vector<int> dists(n+1,0); vector<bool> wasd(n+1,false); vector<int> distd(n+1,0); vector<bool> wasa(n+1,false); vector<int> dista(n+1,0); vector<bool> wasb(n+1,false); vector<int> distb(n+1,0); wass[s] = true; queue<int> q; q.push(s); while(!q.empty()) { int v = q.front(); q.pop(); for(int u : graph[v]) { if(!wass[u]) { wass[u] = true; q.push(u); dists[u] = dists[v]+1; } } } wasd[d] = true; q.push(d); while(!q.empty()) { int v = q.front(); q.pop(); for(int u : graph[v]) { if(!wasd[u]) { wasd[u] = true; q.push(u); distd[u] = distd[v]+1; } } } wasa[a] = true; q.push(a); while(!q.empty()) { int v = q.front(); q.pop(); for(int u : graph[v]) { if(!wasa[u]) { wasa[u] = true; q.push(u); dista[u] = dista[v]+1; } } } wasb[b] = true; q.push(b); while(!q.empty()) { int v = q.front(); q.pop(); for(int u : graph[v]) { if(!wasb[u]) { wasb[u] = true; q.push(u); distb[u] = distb[v]+1; } } } if(dists[a] == dists[b] && distd[a] == distd[b]) { int mxdistda = n; int mxdistdb = n; int mxdistsa = n; int mxdistsb = n; for(int i = 1; i <= n; i++) { if(dista[i] == distb[i]) { if(dista[i]+distd[i] == distd[a]) { mxdistda = min(mxdistda,dista[i]); } if(distb[i]+distd[i] == distd[b]) { mxdistdb = min(mxdistdb,distb[i]); } if(dista[i]+dists[i] == dists[a]) { mxdistsa = min(mxdistsa,dista[i]); } if(distb[i]+dists[i] == dists[b]) { mxdistsb = min(mxdistsb,distb[i]); } } } if(mxdistsa > mxdistda && mxdistsb > mxdistdb) { cout << max(min(distd[a]-dists[a],distd[b]-dists[b])-1,-1); } else { cout << max(min(distd[a]-dists[a],distd[b]-dists[b]),-1); } } else { cout << max(min(distd[a]-dists[a],distd[b]-dists[b]),-1); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...