#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
#define pll pair<ll,ll>
#define vi vector<int>
#define pb push_back
#define all(a) a.begin(),a.end()
const int mxn = 1001, inf = 1e9+1;
vector<int> g[mxn], dp[mxn], dp2[mxn];
int val[mxn], sub[mxn];
bool vis[mxn];
void dfs(int u){
vis[u] = 1;
dp[u].resize(2,inf);
dp[u][1] = val[u];
dp2[u].resize(2,inf);
dp2[u][0] = 0;
sub[u] = 1;
for(auto v : g[u]) if(!vis[v]){
dfs(v);
dp[u].resize(sub[u]+sub[v]+1,inf);
dp2[u].resize(sub[u]+sub[v]+1,inf);
for(int i = sub[u]+sub[v]; i >= 0; i--)
for(int j = max(0,i-sub[v]); j <= min(i,sub[u]); j++){
dp[u][i] = min(dp[u][i],dp[u][j] + dp[v][i-j]);
dp2[u][i] = min(dp2[u][i],dp2[u][j] + dp2[v][i-j]);
if(i-j!=1) dp2[u][i] = min(dp2[u][i],dp2[u][j] + dp[v][i-j]);
dp[u][i] = min(dp[u][i],dp[u][j] + dp2[v][i-j]);
}
sub[u] += sub[v];
}
}
void solve(){
int n,m,q; cin >> n >> m;
for(int i = 1; i <= n; i++)
cin >> val[i];
for(int i = 1; i <= m; i++){
int u,v; cin >> u >> v;
g[u].pb(v); g[v].pb(u);
}
vector<int> res(n+1,inf);
res[0] = 0;
int sz = 0;
for(int i = 1; i <= n; i++) if(!vis[i]){
dfs(i);
for(int j = sz+sub[i]; j; j--)
for(int k = max(0,j-sub[i]); k <= min(j,sz); k++){
res[j] = min(res[j],res[k] + dp2[i][j-k]);
if(j-k!=1) res[j] = min(res[j],res[k] + dp[i][j-k]);
}
sz += sub[i];
}
vector<pii> vec;
for(int i = 0; i <= n; i++) if(res[i] != inf){
vec.push_back({res[i],i});
}
cin >> q;
for(int i = 0; i < q; i++){
int s; cin >> s;
int ind = upper_bound(all(vec),make_pair(s,n)) - vec.begin()-1;
cout << vec[ind].second << '\n';
}
}
signed main(){
cin.tie(0)->sync_with_stdio(0);
int t = 1;
// cin >> t;
while(t--){solve();}
}
| # | 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... |