Submission #130541

#TimeUsernameProblemLanguageResultExecution timeMemory
130541groeneprofHighway Tolls (IOI18_highway)C++14
12 / 100
305 ms262148 KiB
#include "highway.h" #include <bits/stdc++.h> #define int long long using namespace std; struct edge{ int id, v; }; int N, M, A, B; vector<vector<edge> > graph; void dfs(int u, int par, int id, int d, int dist, vector<int>& idlist, vector<int>& vlist){ if(d == dist){ idlist.push_back(id); vlist.push_back(u); } for(edge e : graph[u]) if(e.v!=par){ dfs(e.v, u, e.id, d+1, dist, idlist, vlist); } } int findT(int S, int par, int dist, int id){ vector<int> idlist, vlist; dfs(S, par, id, 0, dist, idlist, vlist); int L = 0, R = idlist.size(); while(L!=R-1){ int Mi = (L+R)/2; vector<signed> w(M, 0); for(int i = 0; i<Mi; i++){ w[idlist[i]]=1; } if(ask(w)==dist*A){ L = Mi; } else{ R = Mi; } } return vlist[L]; } void find_pair(signed _N, vector<signed> U, vector<signed> V, signed _A, signed _B) { N = _N; M = U.size(); A = _A; B = _B; graph.resize(N); for(int i = 0; i<M; i++){ graph[U[i]].push_back({i, V[i]}); graph[V[i]].push_back({i, U[i]}); } vector<signed> w(M, 0); int dist = ask(w)/A; answer(0, findT(0, 0, dist, -1)); }
#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...