#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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |