# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
336468 | parsabahrami | Džumbus (COCI19_dzumbus) | C++17 | 76 ms | 19308 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef pair<int, int> pii;
#define SZ(x) (int) x.size()
#define F first
#define S second
const int N = 1e3 + 10;
const ll INF = 1e18;
ll pd[2][N], dp[2][N][N], A[N], dp2[N]; int S[N], M[N], D[N], n, q, sum, m;
vector<int> adj[N];
void DFS(int v, int p = -1) {
M[v] = 1;
fill(dp[1][v], dp[1][v] + N, INF);
fill(dp[0][v], dp[0][v] + N, INF);
dp[0][v][0] = 0;
dp[1][v][1] = D[v];
S[v] = 1;
for (int u : adj[v]) {
if (u == p) continue;
DFS(u, v);
for (int i = 0; i <= S[v] + S[u]; i++) pd[0][i] = pd[1][i] = INF;
for (int i = 0; i <= S[v]; i++) {
for (int j = 0; j <= S[u]; j++) {
pd[0][i + j] = min(pd[0][i + j], dp[0][v][i] + dp[0][u][j]);
pd[0][i + j] = min(pd[0][i + j], dp[1][v][i] + dp[1][u][j]);
pd[1][i + j] = min(pd[1][i + j], dp[1][v][i] + dp[0][u][j]);
pd[1][i + j] = min(pd[1][i + j], dp[1][v][i] + dp[1][u][j]);
}
}
S[v] += S[u];
for (int i = 0; i < 2; i++) {
for (int j = 0; j <= S[v]; j++) {
dp[i][v][j] = min(dp[i][v][j], pd[i][j]);
}
}
}
}
int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++) scanf("%d", &D[i]);
for (int i = 1; i <= m; i++) {
int u, v; scanf("%d%d", &u, &v);
adj[u].push_back(v);
adj[v].push_back(u);
}
fill(A, A + N, INF);
A[0] = 0;
for (int v = 1; v <= n; v++) {
if (M[v]) continue;
DFS(v);
for (int i = 0; i <= sum + S[v]; i++) dp2[i] = INF;
for (int i = 0; i <= sum; i++) {
for (int j = 0; j <= S[v]; j++) {
dp2[i + j] = min(dp2[i + j], A[i] + dp[0][v][j]);
}
}
sum += S[v];
for (int i = 0; i <= sum; i++) {
A[i] = min(A[i], dp2[i]);
}
}
A[n + 1] = INF;
for (int i = n; i >= 0; i--) {
A[i] = min(A[i], A[i + 1]);
//printf("%d %lld\n", i, A[i]);
}
for (scanf("%d", &q); q; q--) {
int x; scanf("%d", &x);
printf("%ld\n", upper_bound(A, A + n + 1, x) - A - 1);
}
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | 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... |