Submission #1190875

#TimeUsernameProblemLanguageResultExecution timeMemory
1190875zNatsumiDžumbus (COCI19_dzumbus)C++20
110 / 110
32 ms24904 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int32_t N = 1e3 + 5; const int64_t INF = 1e17; int n, m, q, d[N], f[N][N], g[N][N], h[N][N], dp[N], sz[N]; bool vst[N]; vector<int> ad[N]; void dfs(int u){ vst[u] = true; h[u][1] = f[u][1] = d[u]; sz[u] = 1; for(auto v : ad[u]) if(!vst[v]){ dfs(v); for(int i = sz[u]; i >= 0; i--) for(int j = sz[v]; j >= 1; j--){ if(i >= 1) f[u][i + j] = min(f[u][i + j], min(f[u][i], h[u][i]) + min(f[v][j], h[v][j])); if(i > 1) f[u][i + j] = min(f[u][i + j], f[u][i] + g[v][j]); if(i < sz[u]) g[u][i + j] = min({g[u][i + j], g[u][i] + f[v][j], g[u][i] + g[v][j]}); } for(int i = sz[u]; i >= 1; i--) for(int j = sz[v]; j >= 1; j--) h[u][i + j] = min(h[u][i + j], h[u][i] + g[v][j]); sz[u] += sz[v]; } f[u][1] = INF; } int32_t main(){ cin.tie(0)->sync_with_stdio(0); cin >> n >> m; for(int i = 1; i <= n; i++) cin >> d[i]; for(int i = 1; i <= m; i++){ int u, v; cin >> u >> v; ad[u].push_back(v); ad[v].push_back(u); } for(int i = 1; i <= n; i++){ dp[i] = INF; for(int j = 1; j <= n; j++) f[i][j] = g[i][j] = h[i][j] = INF; } int cur = 0; for(int u = 1; u <= n; u++) if(!vst[u]){ dfs(u); for(int i = cur; i >= 0; i--) if(i != 1) for(int j = sz[u]; j >= 2; j--) dp[i + j] = min(dp[i + j], dp[i] + min(f[u][j], g[u][j])); cur += sz[u]; } cin >> q; while(q--){ int s; cin >> s; int it = upper_bound(dp + 1, dp + n + 1, s) - dp - 1; cout << (it < 2 ? 0 : it) << "\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...