Submission #447746

#TimeUsernameProblemLanguageResultExecution timeMemory
447746Nima_Naderi007 (CEOI14_007)C++14
100 / 100
304 ms35776 KiB
//In the name of God //#pragma GCC optimize("O2") #include<bits/stdc++.h> using namespace std; typedef long long ll; const ll MXN = 2e5 + 10; const ll MXM = 6e5 + 10; const ll INF = 1e9; ll n, m, k, t, s[2], Src[4]; ll dis[4][MXN], Q[MXN]; vector<ll> adj[MXN]; bool vis[MXN]; void BFS(ll f, ll src){ fill(dis[f], dis[f] + MXN, INF); memset(vis, 0, sizeof vis); ll L = 0, R = 0; Src[f] = src; dis[f][src] = 0, Q[R ++] = src, vis[src] = 1; while(L < R){ ll u = Q[L ++]; for(auto v : adj[u]){ if(!vis[v]){ dis[f][v] = dis[f][u] + 1; vis[v] = 1, Q[R ++] = v; } } } } inline bool in_path(ll u, ll f0, ll f1){ ll s = Src[f0], e = Src[f1]; return (dis[f0][u] + dis[f1][u] == dis[f0][e]); } ll check(ll f, ll x){//tz check if(dis[f][k] + x > dis[f][t]) return 1; if(dis[f][k] + x < dis[f][t]) return 0; return 2; } bool check(ll x){ ll ck0 = check(0, x), ck1 = check(1, x); if(ck0 == 1 || ck1 == 1) return 0; if(ck0 == 0 || ck1 == 0) return 1; //return (!check(0, x)) && (!check(1, x)); ll tz = 0, km = 0; for(int i = 1; i <= n; i ++){ if(in_path(i, 2, 0) && in_path(i, 2, 1)){ km = max(km, dis[2][i]); } if(in_path(i, 3, 0) && in_path(i, 3, 1)){ tz = max(tz, dis[3][i]); } } return !(tz > km + x); } int main(){ ios::sync_with_stdio(0);cin.tie(0); cout.tie(0); cin >> n >> m >> k >> t >> s[0] >> s[1]; for(int i = 1; i <= m; i ++){ ll u, v; cin >> u >> v; adj[u].push_back(v), adj[v].push_back(u); } BFS(0, s[0]), BFS(1, s[1]); BFS(2, k), BFS(3, t); if(!check(0)) return cout << -1, 0; ll low = 0, hig = n + 1; while(hig - low > 1){ ll mid = (low + hig) / 2; if(check(mid)) low = mid; else hig = mid; } cout << low << '\n'; return 0; } // I was born to be making history. // N.N

Compilation message (stderr)

007.cpp: In function 'bool in_path(ll, ll, ll)':
007.cpp:30:5: warning: unused variable 's' [-Wunused-variable]
   30 |  ll s = Src[f0], e = Src[f1];
      |     ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...