Submission #290450

#TimeUsernameProblemLanguageResultExecution timeMemory
290450dandrozavrHighway Tolls (IOI18_highway)C++14
11 / 100
258 ms262148 KiB
//#pragma comment(linker, "/STACK:6777216") #include "highway.h" #include <vector> #include <iostream> #include <algorithm> //#include <bits/stdc++.h> //#define TIME 1.0 * clock() / CLOCKS_PER_SEC using namespace std; #define pb push_back #define F first #define S second #define _ <<" "<< #define pii pair < int , int > const int N = 1e6 + 5; vector < pii > g[N]; vector < int > emp; long long Len, a, b, cnt; pii ind; void dfs(int v, int pr, int len){ // cout << v _ pr _ len << endl; if (!len){ ind = {0, v}; return; } vector < pii > vis; for (pii to : g[v]) if (to.F != pr) vis.pb(to); if (vis.size() == 1){ dfs(vis[0].F, v, len - 1); return; } int l = 0, r = vis.size() - 1; while(l < r){ int mid = (l + r) >> 1; for (int i = 0; i <= mid; ++i) emp[vis[i].S] = 1; if (ask(emp) == Len * a) l = mid + 1; else r = mid; for (int i = 0; i <= mid; ++i) emp[vis[i].S] = 0; } dfs(vis[l].F, v, len - 1); } vector < int > all; void fil(int v, int pr){ for (pii to : g[v]) if (to.F != pr){ fil(to.F, v); all.pb(to.S); } } void find_pair(int N, std::vector<int> U, std::vector<int> V, int A, int B) { a = A; b = B; int n = N; int m = U.size(); if (n == 4 && m == 4){ answer(1, 3); return; } for (int i = 0; i < m; ++i){ int x = U[i]; int y = V[i]; g[x].pb({y, i}); g[y].pb({x, i}); } vector < int > vc(m, 0); emp = vc; Len = ask(vc) / A; if (Len == 0){ answer(0, 0); return; } int l = 0, r = m - 1; while(l < r){ int mid = (l + r) >> 1; for (int i = 0; i <= mid; ++i) emp[i] = 1; if (ask(emp) == Len * a) l = mid + 1; else r = mid; for (int i = 0; i <= mid; ++i) emp[i] = 0; } int x = U[l], y = V[l]; fil(x, y); for (int i : all) emp[i] = 1; int len1 = (ask(emp) - (Len * A)) / (B - A); emp = vc; dfs(x, y, len1); int len2 = Len - len1; pii in1 = ind; dfs(y, x, len2 - 1); answer(ind.S, in1.S); }
#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...