Submission #849175

#TimeUsernameProblemLanguageResultExecution timeMemory
849175abcvuitunggioRace (IOI11_race)C++17
100 / 100
315 ms80208 KiB
#include "race.h"
#include <bits/stdc++.h>
using namespace std;
vector <pair <int, int>> ke[200001];
map <long long, long long> mp[200001];
long long k,len[200001],res=1e9,d[200001];
void dfs(int u, int p){
    int bigchild=-1,sz=0;
    for (auto [v,w]:ke[u])
        if (v!=p){
            d[v]=d[u]+1;
            len[v]=len[u]+w;
            dfs(v,u);
            if (mp[v].size()>sz){
                sz=mp[v].size();
                bigchild=v;
            }
        }
    if (bigchild!=-1)
        swap(mp[u],mp[bigchild]);
    for (auto [v,w]:ke[u]){
        if (v!=bigchild){
            for (auto [l,h]:mp[v])
                if (mp[u].count(k+len[u]*2-l))
                    res=min(res,mp[u][k+len[u]*2-l]+h-d[u]*2);
            for (auto [l,h]:mp[v])
                if (!mp[u].count(l))
                    mp[u][l]=h;
                else
                    mp[u][l]=min(mp[u][l],h);
            mp[v].clear();
        }
    }
    if (mp[u].count(k+len[u]))
        res=min(res,mp[u][k+len[u]]-d[u]);
    if (!mp[u].count(len[u]))
        mp[u][len[u]]=d[u];
    else
        mp[u][len[u]]=min(mp[u][len[u]],d[u]);
}
int best_path(int N, int K, int H[][2], int L[]){
    k=K;
    for (int i=0;i<N-1;i++){
        ke[H[i][0]].push_back({H[i][1],L[i]});
        ke[H[i][1]].push_back({H[i][0],L[i]});
    }
    dfs(0,0);
    return (res>N?-1:res);
}

Compilation message (stderr)

race.cpp: In function 'void dfs(int, int)':
race.cpp:14:29: warning: comparison of integer expressions of different signedness: 'std::map<long long int, long long int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   14 |             if (mp[v].size()>sz){
      |                 ~~~~~~~~~~~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...