| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 423453 | ja_kingy | 통행료 (IOI18_highway) | C++14 | 352 ms | 13692 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "highway.h"
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
const int mxN = 90000;
int n, m, mn;
vector<pii> adj[mxN];
int qry(vector<int> &edges) {
vector<int> w(m);
for (int i: edges) w[i] = 1;
return ask(w);
}
int bsearch(vector<int> edges, vector<int> extras){
int lo = 0, hi = edges.size(), mid;
while (hi != lo) {
mid = lo+hi>>1;
vector<int> q = extras;
q.insert(q.end(), edges.begin(), edges.begin()+mid+1);
if (qry(q) != mn) hi = mid;
else lo = mid+1;
}
return lo;
}
void find_pair(int N, std::vector<int> U, std::vector<int> V, int A, int B) {
n = N;
m = U.size();
for (int i = 0; i < m; ++i) {
adj[U[i]].push_back({V[i],i});
adj[V[i]].push_back({U[i],i});
}
vector<int> all(m);
iota(all.begin(), all.end(), 0);
mn = ask(vector<int>(m));
int fst = bsearch(all, {});
queue<int> q;
vector<int> seen(n), edge_in_tree(m), node_in_subtree(n), tree_edges, psubtree, ch(m);
q.push(U[fst]);
seen[U[fst]] = 1;
while (q.size()) {
int u = q.front(); q.pop();
for (pii e: adj[u]) if (e.second >= fst && !seen[e.first]) {
seen[e.first] = 1;
q.push(e.first);
if (node_in_subtree[u] || e.first == V[fst]) {
node_in_subtree[e.first] = 1;
psubtree.push_back(e.second);
} else {
tree_edges.push_back(e.second);
}
edge_in_tree[e.second] = 1;
ch[e.second] = e.first;
}
}
vector<int> extras;
for (int i = 0; i < m; ++i) if (!edge_in_tree[i]) extras.push_back(i);
reverse(psubtree.begin(), psubtree.end());
reverse(tree_edges.begin(), tree_edges.end());
int res = bsearch(tree_edges, extras);
answer(ch[psubtree[bsearch(psubtree, extras)]], res == tree_edges.size() ? U[fst] : ch[tree_edges[res]]);
}
Compilation message (stderr)
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
