이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "highway.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int,int> ii;
#define pf printf
#define pb push_back
#define all(x) x.begin(),x.end()
#define maxn 90005
int n,m,a,b,dist[maxn][2],pedge[maxn][2],s[maxn];
ll d;
vi ord[2];
vector<ii> AL[maxn];
void find_pair(int _n,vi u,vi v,int _a,int _b){
n=_n;a=_a;b=_b;
m=u.size();
for(int i=0;i<m;++i){
AL[u[i]].pb({v[i],i});
AL[v[i]].pb({u[i],i});
}
vi w(m);
d=ask(w)/a;
vi pos;
int lo=0,hi=m-1,mid,res;
while(lo<=hi){
mid=(lo+hi)>>1;
vi w(m);
for(int i=0;i<=mid;++i)w[i]=1;
if(ask(w)>d*a)res=mid,hi=mid-1;
else lo=mid+1;
}
int f=res;
vi r={u[f],v[f]};
memset(dist,-1,sizeof dist);
for(int i=0;i<2;++i){
queue<int> q;
dist[r[i]][i]=0;
q.push(r[i]);
while(!q.empty()){
int u=q.front();q.pop();
ord[i].pb(u);
for(auto[v,x]:AL[u]){
if(dist[v][i]!=-1)continue;
dist[v][i]=dist[u][i]+1;
pedge[v][i]=x;
q.push(v);
}
}
}
for(int i=0;i<n;++i){
if(dist[i][1]<dist[i][0])s[i]=1;
}
vi ans={0,0};
for(int x=0;x<2;++x){
vi pos;
int idk=pedge[4410][0];//test
int cnt=0;
for(int i:ord[x]){
if(i!=r[x]&&s[i]==x){
pos.pb(pedge[i][x]);
}
}
vi w(m);
for(int i=0;i<m;++i){
if(i!=f&&(s[u[i]]==x||s[v[i]]==x))w[i]=1;
}
for(int i:pos)w[i]=0;
int lo=-1,hi=pos.size()-1,mid,res=-1;
while(lo<=hi){
int mid=((lo+hi+2)>>1)-1;
for(int i=mid+1;i<pos.size();++i)w[pos[i]]=1;
if(ask(w)==d*a)res=mid,hi=mid-1;
else lo=mid+1;
for(int i=mid+1;i<pos.size();++i)w[pos[i]]=0;
}
if(res==-1)ans[x]=r[x];
else{
int e=pos[res];
ans[x]=(dist[u[e]][x]>dist[v[e]][x])?u[e]:v[e];
}
}
answer(ans[0],ans[1]);
}
컴파일 시 표준 에러 (stderr) 메시지
highway.cpp: In function 'void find_pair(int, vi, vi, int, int)':
highway.cpp:80:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
80 | for(int i=mid+1;i<pos.size();++i)w[pos[i]]=1;
| ~^~~~~~~~~~~
highway.cpp:83:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
83 | for(int i=mid+1;i<pos.size();++i)w[pos[i]]=0;
| ~^~~~~~~~~~~
highway.cpp:65:7: warning: unused variable 'idk' [-Wunused-variable]
65 | int idk=pedge[4410][0];//test
| ^~~
highway.cpp:66:7: warning: unused variable 'cnt' [-Wunused-variable]
66 | int cnt=0;
| ^~~
highway.cpp:77:29: warning: unused variable 'mid' [-Wunused-variable]
77 | int lo=-1,hi=pos.size()-1,mid,res=-1;
| ^~~
highway.cpp:41:11: warning: 'res' may be used uninitialized in this function [-Wmaybe-uninitialized]
41 | vi r={u[f],v[f]};
| ^
# | 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... |