제출 #91516

#제출 시각아이디문제언어결과실행 시간메모리
91516faustaadp경주 (Race) (IOI11_race)C++17
100 / 100
1071 ms114648 KiB
#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;
}

컴파일 시 표준 에러 (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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...