제출 #849420

#제출 시각아이디문제언어결과실행 시간메모리
849420Mr_Ph경주 (Race) (IOI11_race)C++14
0 / 100
20 ms163676 KiB
#include "race.h" #include<bits/stdc++.h> #define ll long long using namespace std; vector<int>vs; vector<int>vs1; vector<vector<pair<int,int>>>adj; ll ans=1e9; int pog=0; ll dp[200002][102]; void dfs(int node,ll lol,ll 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); } } } ll dfs1(int node,ll sum,int p) { if(sum>pog) return 1e9; if(sum==pog) return 0; if(dp[node][sum]!=-1) return dp[node][sum]; ll e=1e9; 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)); } else { for(int i=0; i<n; i++) { vs=vs1; dfs(i,0,0); // cout<<ans<<endl; } } int ans1=ans; if(ans1>=1e9) ans1=-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...