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 "race.h"
#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define mp make_pair
#define fi first
#define se second
using namespace std;
ll n,k,has,b[202020],besar[202020],calon,me[1010101],i;
vector<ll> v[202020];
vector<ll> w[202020];
void dfs(ll aa,ll bb,ll cc)
{
ll ii,ma=0;
besar[aa]=1;
for(ii=0;ii<v[aa].size();ii++)
if((v[aa][ii]!=bb)&&(!b[v[aa][ii]]))
{
dfs(v[aa][ii],aa,cc);
besar[aa]+=besar[v[aa][ii]];
ma=max(ma,besar[v[aa][ii]]);
}
//cout<<aa<<" "<<ma<<" "<<(cc-besar[aa])<<"\n";
if((ma<=(cc/2))&&((cc-besar[aa])<=(cc/2)))calon=aa;
}
void dfs2(ll aa,ll bb)
{
ll ii,ma=0;
besar[aa]=1;
for(ii=0;ii<v[aa].size();ii++)
if((v[aa][ii]!=bb)&&(!b[v[aa][ii]]))
{
dfs2(v[aa][ii],aa);
besar[aa]+=besar[v[aa][ii]];
}
// cout<<aa<<" "<<ma<<" "<<(cc-besar[aa])<<"\n";
// if((ma<=(cc/2))&&((cc-besar[aa])<=(cc/2)))calon=aa;
}
vector<pair<ll,ll> > isi;
void cari(ll aa,ll bb,ll cc,ll dd)
{
if(dd>k)return ;
//cout<<aa<<" "<<bb<<" "<<cc<<" "<<dd<<" "<<me[k-dd]<<"\n";
if(me[k-dd]!=0)has=min(has,cc+me[k-dd]);
isi.pb(mp(cc,dd));
ll ii;
for(ii=0;ii<v[aa].size();ii++)
if((v[aa][ii]!=bb)&&(!b[v[aa][ii]]))
cari(v[aa][ii],aa,cc+1,dd+w[aa][ii]);
}
void cari(ll aa,ll bb)
{
// cout<<aa<<" "<<bb<<"\n";
calon=-1;
dfs(aa,aa,bb);
ll C0=calon;
// cout<<calon<<"\n";
ll ii,jj;
vector<ll> ini;
vector<ll> BS;
for(ii=0;ii<v[calon].size();ii++)
{
if(b[v[calon][ii]])continue;
//cout<<calon<<" "<<v[calon][ii]<<" x\n";
isi.clear();
cari(v[calon][ii],calon,1,w[calon][ii]);
for(jj=0;jj<isi.size();jj++)
{
//cout<<jj<<"->"<<k-isi[jj].se<<"\n";
if((me[isi[jj].se]==0)||(me[isi[jj].se]>isi[jj].fi))
me[isi[jj].se]=isi[jj].fi;
ini.pb(isi[jj].se);
}
if(me[k]!=0)has=min(has,me[k]);
}
for(ii=0;ii<ini.size();ii++)
me[ini[ii]]=0;
b[calon]=1;
dfs2(calon,calon);
ll te=0;
for(ii=0;ii<v[C0].size();ii++)
{
if(b[v[C0][ii]])continue;
//cout<<calon<<" "<<v[calon][ii]<<" z\n";
cari(v[C0][ii],besar[v[C0][ii]]);
//te++;
}
}
int best_path(int N, int K, int H[][2], int L[])
{
n=N;
k=K;
has=1e18;
for(i=0;i<(n-1);i++)
{
v[H[i][0]].pb(H[i][1]);
w[H[i][0]].pb(L[i]);
v[H[i][1]].pb(H[i][0]);
w[H[i][1]].pb(L[i]);
}
cari(0,N);
if(has==1e18)has=-1;
return has;
}
Compilation message (stderr)
race.cpp: In function 'void dfs(long long int, long long int, long long int)':
race.cpp:16:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(ii=0;ii<v[aa].size();ii++)
~~^~~~~~~~~~~~~
race.cpp: In function 'void dfs2(long long int, long long int)':
race.cpp:30:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(ii=0;ii<v[aa].size();ii++)
~~^~~~~~~~~~~~~
race.cpp:28:11: warning: unused variable 'ma' [-Wunused-variable]
ll ii,ma=0;
^~
race.cpp: In function 'void cari(long long int, long long int, long long int, long long int)':
race.cpp:47:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(ii=0;ii<v[aa].size();ii++)
~~^~~~~~~~~~~~~
race.cpp: In function 'void cari(long long int, long long int)':
race.cpp:61:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(ii=0;ii<v[calon].size();ii++)
~~^~~~~~~~~~~~~~~~
race.cpp:67:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(jj=0;jj<isi.size();jj++)
~~^~~~~~~~~~~
race.cpp:76:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(ii=0;ii<ini.size();ii++)
~~^~~~~~~~~~~
race.cpp:81:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(ii=0;ii<v[C0].size();ii++)
~~^~~~~~~~~~~~~
race.cpp:80:8: warning: unused variable 'te' [-Wunused-variable]
ll te=0;
^~
# | 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... |