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<iostream>
#include<vector>
#include<algorithm>
#include "highway.h"
#define f first
#define s second
#define DIM 130005
using namespace std;
static int t[2][DIM], niv[2][DIM], viz[2][DIM], m, p[2][DIM], nr[2], n, cd[DIM];
static pair<int, int> w[DIM], aux[DIM];
static vector<int> r, v[DIM];
void bfs(int i, int srs){
int st, dr, j, nod, vecin;
viz[i][srs] = 1;
cd[1] = srs;
st = dr = 1;
while(st <= dr){
nod = cd[st];
st++;
for(j = 0; j < v[nod].size(); j++){
vecin = v[nod][j];
if(viz[i][vecin] == 0){
cd[++dr] = vecin;
niv[i][vecin] = 1 + niv[i][nod];
t[i][vecin] = nod;
viz[i][vecin] = 1;
}
}
}
}
int solve(int ind, long long sum){
int i, st, dr, mid, nr;
nr = 0;
for(i = 1; i <= n; i++){
if(niv[ind][i] < niv[1 - ind][i]){
aux[++nr] = make_pair(niv[ind][i], i);
}
}
sort(aux + 1, aux + nr + 1);
for(i = 1; i <= nr; i++){
p[ind][ aux[i].s ] = i;
}
st = 1;
dr = nr;
while(st <= dr){
mid = (st + dr) / 2;
for(i = 0; i < m; i++){
r[i] = 0;
if(p[ind][ w[i].f ] > mid || p[ind][ w[i].s ] > mid){
r[i] = 1;
}
}
if(ask(r) == sum){
dr = mid - 1;
}
else{
st = mid + 1;
}
}
return aux[st].s;
}
void find_pair(int N, vector<int> U, vector<int> V, int a, int b){
n = N;
int i, st, dr, mid, x, y;
long long sum, cost;
m = U.size();
r.resize(m);
for(i = 0; i < m; i++){
w[i] = make_pair(U[i] + 1, V[i] + 1);
v[ w[i].f ].push_back(w[i].s);
v[ w[i].s ].push_back(w[i].f);
r[i] = 0;
}
sum = ask(r);
st = 1;
dr = m;
while(st <= dr){
mid = (st + dr) / 2;
for(i = 0; i < m; i++){
if(i < mid){
r[i] = 0;
}
else{
r[i] = 1;
}
}
if(ask(r) == sum){
dr = mid - 1;
}
else{
st = mid + 1;
}
}
bfs(0, w[dr].f);
bfs(1, w[dr].s);
x = solve(0, sum);
y = solve(1, sum);
answer(x - 1, y - 1);
}
Compilation message (stderr)
highway.cpp: In function 'void bfs(int, int)':
highway.cpp:20:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(j = 0; j < v[nod].size(); j++){
~~^~~~~~~~~~~~~~~
highway.cpp: In function 'void find_pair(int, std::vector<int>, std::vector<int>, int, int)':
highway.cpp:65:20: warning: unused variable 'cost' [-Wunused-variable]
long long sum, cost;
^~~~
highway.cpp: At global scope:
highway.cpp:9:63: warning: 'nr' defined but not used [-Wunused-variable]
static int t[2][DIM], niv[2][DIM], viz[2][DIM], m, p[2][DIM], nr[2], n, cd[DIM];
^~
# | 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... |