Submission #1299291

#TimeUsernameProblemLanguageResultExecution timeMemory
1299291aarb_.tomatexdDžumbus (COCI19_dzumbus)C++20
0 / 110
19 ms24080 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define pb push_back const ll inf = 1e18; int main(){ ios::sync_with_stdio(0); cin.tie(0); int n,m; cin >> n >> m; vector<ll>d(n+1); for(int i=1;i<=n;i++) cin >> d[i]; vector<vector<int>>adj(n+1); for(int i=0;i<m;i++){ int a,b; cin >> a >> b; adj[a].pb(b); adj[b].pb(a); } vector<int>order; if(n==1){ order.pb(1); }else{ int inic = 1; for(int i=1;i<=n;i++) if(adj[i].size()<=1){ inic = i; break; } order.reserve(n); vector<int>vis(n+1,0); int cur = inic, prev = -1; while(true){ order.pb(cur); vis[cur] = 1; int next = -1; for(int v: adj[cur]){ if(v==prev) continue; next = v; break; } if(next == -1) break; prev = cur; cur = next; } } vector<ll>cost(n+1,0); for(int i=0;i<n;i++) cost[i+1] = d[order[i]]; vector<vector<array<ll,3>>>dp(n+1,vector<array<ll,3>>(n+1)); for(int i=0;i<=n;i++) for(int k=0;k<=n;k++) dp[i][k][0] = dp[i][k][1] = dp[i][k][2] = inf; dp[0][0][0] = 0; for(int i=0;i<n;i++){ for(int k=0;k<=n;k++){ for(int s =0;s<3;s++){ ll cur = dp[i][k][s]; if(cur == inf) continue; dp[i+1][k][0] = min(dp[i+1][k][0] , cur); ll nc = cur + cost[i+1]; if(s==0){ dp[i+1][k][1] = min(dp[i+1][k][0], cur); }else if(s==1){ if(k+2<=n) dp[i+1][k+2][2] = min(dp[i+1][k+2][2], nc); }else{ if(k+1 <= n)dp[i+1][k+1][2] = min(dp[i+1][k+1][2], nc); } } } } vector<ll>minc(n+1,inf); for(int k=0;k<=n;k++){ for(int s=0;s<3;s++){ minc[k] = min(minc[k], dp[n][k][s]); } } for(int k=1;k<=n;k++) if(minc[k] < minc[k-1]) minc[k] = minc[k-1]; int q; cin >> q; while(q--){ ll s; cin >> s; int lo =0 , hi = n, ans = 0; while(lo <= hi){ int mid = (lo+hi)/2; if(minc[mid]<=s){ ans = mid; lo = mid+1; }else hi = mid-1; } cout<<ans<<'\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...