Submission #1257368

#TimeUsernameProblemLanguageResultExecution timeMemory
1257368chautanphatDžumbus (COCI19_dzumbus)C++20
110 / 110
147 ms24904 KiB
#include <bits/stdc++.h> using namespace std; const int maxn = 1e3 + 1; int d[maxn], sz[maxn]; long long dp[maxn][maxn][3]; vector<int> a[maxn]; void dfs(int u, int pre = 0) { sz[u] = 1; dp[u][0][0] = 0; dp[u][1][2] = d[u]; for (int i = 0; i < (int)a[u].size(); i++) { int v = a[u][i]; if (v == pre) continue; if (!sz[v]) dfs(v, u); for (int j = sz[u]; j >= 0; j--) for (int k = 1; k <= sz[v]; k++) { dp[u][j+k][0] = min(dp[u][j+k][0], dp[u][j][0]+min(dp[v][k][0], dp[v][k][1])); dp[u][j+k][1] = min(dp[u][j+k][1], dp[u][j][1]+min({dp[v][k][0], dp[v][k][1], dp[v][k][2]})); dp[u][j+k][1] = min(dp[u][j+k][1], dp[u][j][2]+min(dp[v][k][1], dp[v][k][2])); dp[u][j+k][2] = min(dp[u][j+k][2], dp[u][j][2]+dp[v][k][0]); } sz[u] += sz[v]; } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m; cin >> n >> m; for (int i = 0; i <= n; i++) for (int j = 0; j <= n; j++) for (int k = 0; k < 3; k++) dp[i][j][k] = 1e16; for (int i = 1; i <= n; i++) cin >> d[i]; while (m--) { int u, v; cin >> u >> v; a[u].push_back(v); a[v].push_back(u); } for (int i = 1; i <= n; i++) if (!sz[i]) { dfs(i); a[0].push_back(i); } dfs(0); int q; cin >> q; while (q--) { int s; cin >> s; for (int i = n; i >= 0; i--) if (dp[0][i][0] <= s) { cout << i << '\n'; break; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...