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;
const int N = 9e4 + 1;
int n,m,a,b;
vector<int> adj[N],ass;
vector<pair<int,int> > res;
vector<tuple<int,int,int> > ed;
int lv[N];
long long ash(vector<int> x)
{
ass.assign(m,0);
for(int y : x) ass[y] = 1;
return ask(ass);
}
void dfs(int u,int p)
{
lv[u] = lv[p]+1;
for(int v : adj[u]) if(v!=p) dfs(v,u);
}
void find_pair(int N, vector<int> U, vector<int> V, int A,int B)
{
n = N,m = U.size();
a = A,b = B;
for(int i = 0;i < m;i++)
{
int a = U[i],b = V[i];
a++,b++;
adj[a].push_back(b);
adj[b].push_back(a);
ed.push_back({i,a,b});
ed.push_back({i,b,a});
}
vector<int> tmp;
long long dist = ash(tmp)/a;
dfs(1,0);
for(auto [id,x,y] : ed) if(lv[x]==dist+1 and lv[y]<lv[x])
{
res.push_back({id,x});
}
int l = 0,r = res.size();
r--;
while(l<r)
{
int m = (l+r)/2;
tmp.clear();
for(int i = l;i <= m;i++) tmp.push_back(res[i].first);
long long ret = ash(tmp);
if(ret==dist*a) l = m+1;
else r = m;
}
answer(0,res[l].second-1);
}
Compilation message (stderr)
highway.cpp: In function 'void find_pair(int, std::vector<int>, std::vector<int>, int, int)':
highway.cpp:42:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
42 | for(auto [id,x,y] : ed) if(lv[x]==dist+1 and lv[y]<lv[x])
| ^
# | 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... |