Submission #297455

#TimeUsernameProblemLanguageResultExecution timeMemory
297455rqi통행료 (IOI18_highway)C++14
18 / 100
132 ms8728 KiB
#include "highway.h" #include <bits/stdc++.h> using namespace std; typedef vector<int> vi; typedef long long ll; typedef pair<int, int> pi; typedef vector<pi> vpi; #define pb push_back #define mp make_pair #define f first #define s second #define sz(x) (int)(x).size() const int mx = 90005; int N, M; ll A, B; int D; vi U, V; vpi adj[mx]; //node, edge int getDist(){ vi w(M, 0); return ask(w)/A; } vpi jeds; //edges just before degree d nodes, label of nodes void findJeds(int node, int d = 0, int prv = -1){ for(auto u: adj[node]){ if(u.f == prv) continue; if(d+1 == D){ jeds.pb(mp(u.s, u.f)); continue; } findJeds(u.f, d+1, node); } } void find_pair(int _N, vi _U, vi _V, int _A, int _B) { N = _N; U = _U; V = _V; M = sz(U); for(int i = 0; i < M; i++){ adj[U[i]].pb(mp(V[i], i)); adj[V[i]].pb(mp(U[i], i)); } A = _A; B = _B; if(M == N-1){ //TREE CASE bool isLine = 1; for(int i = 0; i < M; i++){ if(U[i] != i || V[i] != i+1) isLine = 0; } if(isLine){ D = getDist(); vi sts; for(int i = 0; i < N; i++){ if(i+D < N) sts.pb(i); } while(sz(sts) > 1){ vi nsts; vi osts; for(int i = 0; i < sz(sts)/2; i++){ nsts.pb(sts[i]); } for(int i = sz(sts)/2; i < sz(sts); i++){ osts.pb(sts[i]); } vi w(M, 0); for(auto u: nsts) w[u] = 1; if(ask(w) == A*D){ sts = osts; } else sts = nsts; } answer(sts[0], sts[0]+D); return; } D = getDist(); findJeds(0, 0); while(sz(jeds) > 1){ vpi njeds; vpi ojeds; for(int i = 0; i < sz(jeds)/2; i++){ njeds.pb(jeds[i]); } for(int i = sz(jeds)/2; i < sz(jeds); i++){ ojeds.pb(jeds[i]); } vi w(M, 0); for(auto u: njeds){ w[u.f] = 1; } if(ask(w) == A*D){ jeds = ojeds; } else jeds = njeds; } answer(0, jeds[0].s); return; } }
#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...