Submission #1010358

#TimeUsernameProblemLanguageResultExecution timeMemory
1010358HappyCapybaraHighway Tolls (IOI18_highway)C++17
51 / 100
101 ms11424 KiB
#include "highway.h" #include<bits/stdc++.h> using namespace std; #define ll long long void find_pair(int N, vector<int> U, vector<int> V, int A, int B) { int M = U.size(); vector<vector<pair<int,int>>> g(N); for (int i=0; i<M; i++){ g[U[i]].push_back({V[i], i}); g[V[i]].push_back({U[i], i}); } vector<int> f(M, 0); ll d = ask(f)/A; vector<bool> seen(N, false); seen[0] = true; queue<int> q; vector<vector<pair<int,int>>> v; for (pair<int,int> next : g[0]){ vector<pair<int,int>> x; x.push_back(next); q.push(next.first); seen[next.first] = true; while (!q.empty()){ int cur = q.front(); q.pop(); for (pair<int,int> neigh : g[cur]){ if (seen[neigh.first]) continue; seen[neigh.first] = true; x.push_back(neigh); q.push(neigh.first); } } v.push_back(x); } int l = 0, r = v.size(); while (l != r-1){ int m = (l+r)/2; vector<int> w(M, 0); for (int i=l; i<m; i++){ for (pair<int,int> p : v[i]) w[p.second] = 1; } if (ask(w) > d*A) r = m; else l = m; } int br = l; l = 0; r = v[br].size(); while (l != r-1){ int m = (l+r)/2; vector<int> w(M, 0); for (int i=m; i<r; i++) w[v[br][i].second] = 1; if (ask(w) > d*A) l = m; else r = m; } int S = v[br][l].first; vector<int> dist(N, -1); q.push(S); dist[S] = 0; vector<pair<int,int>> pos; while (!q.empty()){ int cur = q.front(); q.pop(); for (pair<int,int> next : g[cur]){ if (dist[next.first] != -1) continue; dist[next.first] = dist[cur]+1; if (dist[next.first] == d) pos.push_back(next); else q.push(next.first); } } l = 0; r = pos.size(); while (l != r-1){ int m = (l+r)/2; vector<int> w(M, 0); for (int i=l; i<m; i++) w[pos[i].second] = 1; if (ask(w) > d*A) r = m; else l = m; } answer(S, pos[l].first); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...