제출 #849437

#제출 시각아이디문제언어결과실행 시간메모리
849437Mr_Ph경주 (Race) (IOI11_race)C++14
0 / 100
20 ms163684 KiB
#include "race.h" #include<bits/stdc++.h> using namespace std; vector<long long>vs; vector<long long>vs1; vector<vector<pair<long long,long long>>>adj; long long ans=1e6; long long pog=0; long long dp[200002][102]; void dfs(long long node,long long lol,long long sum) { vs[node]=true; if(sum>pog) return; if(sum==pog) { ans=min(ans,lol); return; } for(auto i:adj[node]) { if(!vs[i.first]) { // cout<<node<<" "<<i.first<<" "<<i.second<<endl; dfs(i.first,lol+1,sum+i.second); } } } long long dfs1(long long node,long long sum,long long p) { if(sum>pog) return 1e6; if(sum==pog) return 0; if(dp[node][sum]!=-1) return dp[node][sum]; long long e=1e6; for(auto i:adj[node]) { if(i.first==p) continue; e=min(e,dfs1(i.first,sum+i.second,node)+1); } return dp[node][sum]=e; } int best_path(int n, int k, int h[][2], int l[]) { memset(dp,-1,sizeof dp); pog=k; adj.resize(n+1); vs.resize(n+1); vs1=vs; for(int i=0; i<n-1; i++) { // cout<<h[i][0]<<" "<<h[i][1]<<" "<<l[i]<<endl; adj[h[i][0]].push_back({h[i][1],l[i]}); adj[h[i][1]].push_back({h[i][0],l[i]}); } if(n<=200000&&k<=100) for(int i=0;i<n;i++) ans=min(ans,dfs1(i,0,-1)); if(n*k<=1e8) for(int i=0;i<n;i++) dfs(i,0,0); if(ans>=1e6) ans=-1; return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...