제출 #226504

#제출 시각아이디문제언어결과실행 시간메모리
226504mohamedsobhi777경주 (Race) (IOI11_race)C++14
100 / 100
2519 ms126328 KiB
#include "race.h" #include<bits/stdc++.h> using namespace std ; const int NN = 1e6 + 7 ; long long n , k ; long long ans = 10000000000000 ; vector<pair<long long , long long > > adj[NN] ; long long hei[NN] , ldr[NN] , sz[NN]; long long fr[NN] , ls[NN] , ver[NN]; map<long long , map<long long , long long > > anss ; int t = 1; int dfz(int x , int p , long long h, int l = 1 ){ ver[t] = x ; fr[x] = t++ ; int ret = 1; hei[x] = h ; ldr[x] = l ; for(auto u : adj[x]){ if(u.first==p)continue ; ret+=dfz(u .first, x , h + u.second , l+1 ) ; } ls[x] = t++ ; return sz[x] = ret ; } int dfs(int x , int p , bool keep){ int big = 0 ; for(auto u : adj[x]){ if(u.first==p)continue ; if(sz[u.first] > sz[big]){ big = u.first ; } } for(auto u : adj[x]){ if(u.first ==p || u.first ==big)continue ; dfs(u.first, x , 0) ; } if(big){ dfs(big , x , 1 ) ; } anss[hei[x]][ldr[x]]++; for(auto u : adj[x]){ if(u.first==p || u.first == big)continue ; vector<int> v ; for(int j = fr[u.first] ; j < ls[u.first] ;j ++ ){ if( ver[j] ){ long long he = hei[ver[j]] ; long long dl = ldr[ver[j]] ; long long drem = k - (hei[ver[j]] - hei[x] ) ; v.push_back(j) ; if( drem <=0)continue ; for(auto u : anss[ hei[x] + drem ]){ if(u.second){ ans = min(ans , u.first - ldr[x] + dl - ldr[x]) ; } } } } for(auto e : v){ anss[hei[ver[e]]][ ldr[ver[e]] ]++ ; } } for(auto u: anss[hei[x] + k] ){ if(u.second){ ans = min(ans , u.first - ldr[x] ) ; } } if(!keep){ for(int i = fr[x] ; i < ls[x] ; i++){ anss[hei[ver[i]]][ldr[ver[i]]] -- ; } } } int best_path(int N, int K, int H[][2], int L[]) { n = N ; k = K ; bool zez = 0 ; for(int i = 0 ;i < n-1 ;i++){ adj[H[i][0]+1].push_back({H[i][1]+1 , L[i]}) ; adj[H[i][1]+1].push_back({H[i][0]+1, L[i]}) ; zez|=!L[i] ; } dfz(1 , 1 , 0) ; dfs(1 , 1 , 0) ; if(ans==10000000000000) ans = -1 ; if(!k&&zez)ans = 1 ; return ans ; }

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

race.cpp: In function 'int dfs(int, int, bool)':
race.cpp:50:27: warning: unused variable 'he' [-Wunused-variable]
                 long long he = hei[ver[j]] ; 
                           ^~
race.cpp:76:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...