Submission #1299296

#TimeUsernameProblemLanguageResultExecution timeMemory
1299296aarb_.tomatexdDžumbus (COCI19_dzumbus)C++20
20 / 110
3 ms572 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define pb push_back const int inf = 1e8; const int maxn = 1e3+5; const int maxq = 2e5+10; int n,m,q; int dp[maxn][2][2]; vector<ll>d(maxn); vector<int>adj[maxn]; int main(){ ios::sync_with_stdio(0); cin.tie(0); cin >> n >> m; for(int i=0;i<n;i++) cin >> d[i]; for(int i=0;i<m;i++){ int a,b; cin >> a >> b; a--, b--; adj[a].pb(b); adj[b].pb(a); } int x = -1, px = -1; for(int i=0;i<n;i++){ if(adj[i].size()==1){ px = i; x = adj[i][0]; break; } } for(int i=0;i<maxn;i++) dp[i][1][0] = -inf; while(true){ for(int i=0;i<maxn;i++){ dp[i][0][1] = max(dp[i][0][0], dp[i][1][0]); dp[i][1][1] = -inf; if(d[x]<=i) dp[i][1][1] = dp[i-d[x]][1][0] + 1; if(d[x] + d[px]<=i){ dp[i][1][1] = max(dp[i][1][1],dp[i-d[x]-d[px]][0][0]+2); } } for(int i=0;i<maxn;i++){ dp[i][0][0] = dp[i][0][1]; dp[i][1][0] = dp[i][1][1]; } if(adj[x].size() == 1)break; int tmp = adj[x][0] + adj[x][1] - px; px = x; x = tmp; } cin >> q; while(q--){ int s; cin >> s; cout<<max(dp[s][0][0], dp[s][1][0])<<'\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...