제출 #556048

#제출 시각아이디문제언어결과실행 시간메모리
556048jamezzz통행료 (IOI18_highway)C++17
12 / 100
239 ms262144 KiB
#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 maxn 900005

int par[maxn],pedge[maxn],dep[maxn];
vector<ii> AL[maxn];
vector<int> pos;
int n,m,a,b;
ll d;

void dfs(int u){
	for(auto[v,i]:AL[u]){
		if(v==par[u])continue;
		par[v]=u;
		pedge[v]=i;
		dep[v]=dep[u]+1;
		dfs(v);
	}
}

inline void proc(){
	while(pos.size()!=1){
		int x=pos.size()/2;
		vi w(m);
		for(int i=0;i<x;++i)w[pedge[pos[i]]]=1;
		vi tmp;
		if(ask(w)>d*a){
			for(int i=0;i<x;++i)tmp.pb(pos[i]);
		}
		else{
			for(int i=x;i<pos.size();++i)tmp.pb(pos[i]);
		}
		swap(tmp,pos);
		w.clear();
		tmp.clear();
	}
}

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});
	}
	
	memset(par,-1,sizeof par);
	vi w(m);
	d=ask(w)/a;
	dfs(0);
	
	int lo=1,hi=0,mid,res;
	for(int i=0;i<n;++i)hi=max(hi,dep[i]);
	while(lo<=hi){
		mid=(lo+hi)/2;
		vi w(m);
		for(int i=0;i<n;++i){
			if(dep[i]==mid)w[pedge[i]]=1;
		}
		if(ask(w)>d*a)res=mid,lo=mid+1;
		else hi=mid-1;
		w.clear();
	}
	
	for(int i=0;i<n;++i){
		if(dep[i]==res)pos.pb(i);
	}
	proc();
	int s=pos[0];
	
	memset(par,-1,sizeof par);
	dep[s]=0;
	dfs(s);
	
	pos.clear();
	for(int i=0;i<n;++i){
		if(dep[i]==d)pos.pb(i);
	}
	proc();
	int t=pos[0];
	
	answer(s,t);
}

컴파일 시 표준 에러 (stderr) 메시지

highway.cpp: In function 'void proc()':
highway.cpp:39:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   39 |    for(int i=x;i<pos.size();++i)tmp.pb(pos[i]);
      |                ~^~~~~~~~~~~
highway.cpp: In function 'void find_pair(int, vi, vi, int, int)':
highway.cpp:74:3: warning: 'res' may be used uninitialized in this function [-Wmaybe-uninitialized]
   74 |   if(dep[i]==res)pos.pb(i);
      |   ^~
#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...