QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#457733 | #8832. Daily Disinfection | ucup-team3890# | WA | 8ms | 9672kb | C++14 | 2.1kb | 2024-06-29 13:49:20 | 2024-06-29 13:49:21 |
Judging History
answer
#include <iostream>
#include <queue>
namespace MF {
int n, s, t;
struct Edge {
int u, v, c, nxt;
} edges[20000007];
int ecnt;
int head[1000007];
void _addedge(int u, int v, int c) {
edges[ecnt].u = u, edges[ecnt].v = v, edges[ecnt].c = c;
edges[ecnt].nxt = head[u], head[u] = ecnt, ++ecnt;
}
void addedge(int u, int v, int c) { _addedge(u, v, c), _addedge(v, u, 0); }
int dis[1000007];
int cur[1000007];
bool BFS() {
for (int i = 1; i <= n; ++i) {
dis[i] = +0x3b9aca00;
cur[i] = head[i];
}
std::queue<int> q;
dis[s] = 0, q.push(s);
while (!q.empty()) {
int u = q.front();
q.pop();
for (int e = head[u]; e != -1; e = edges[e].nxt) {
if (edges[e].c != 0 && dis[u] + 1 < dis[edges[e].v]) {
dis[edges[e].v] = dis[u] + 1, q.push(edges[e].v);
}
}
}
return dis[t] != +0x3b9aca00;
}
int sF;
int dfs(int u, int fl) {
if (u == t) {
sF += fl;
return fl;
}
int rf = fl;
for (int& e = cur[u]; e != -1; e = edges[e].nxt) {
if (edges[e].c != 0 && dis[edges[e].v] == dis[u] + 1) {
int f = dfs(edges[e].v, std::min(fl, edges[e].c));
fl -= f, edges[e].c -= f, edges[e ^ 1].c += f;
if (fl == 0) {
return rf;
}
}
}
return rf - fl;
}
void init(int _n, int _s, int _t) {
n = _n, s = _s, t = _t;
for (int i = 1; i <= n; ++i) {
head[i] = -1;
}
ecnt = 0;
}
int Dinic() {
sF = 0;
while (BFS()) {
dfs(s, +0x3b9aca00);
}
return sF;
}
};
void solve() {
int n;
std::string s;
std::cin >> n >> s;
MF::init(n + 2, 1, 2);
int cc = 0;
for (int i = 0; i < n; ++i) {
if (s[i] == '1') {
MF::addedge(1, i + 3, 1);
++cc;
} else {
MF::addedge(i + 3, 2, 1);
}
for (int j : {i - 1, i + 1}) {
if (0 <= j && j < n) {
if (s[i] == '1' && s[j] == '0') {
MF::addedge(i + 3, j + 3, 1);
}
}
}
}
int f = MF::Dinic();
std::cout << cc * 2 - f << '\n';
}
int main() {
std::cin.tie(nullptr)->sync_with_stdio(false);
int t;
std::cin >> t;
while (t--) {
solve();
}
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 9672kb
input:
3 2 01 5 00110 9 101010101
output:
1 2 6
result:
ok 3 number(s): "1 2 6"
Test #2:
score: -100
Wrong Answer
time: 8ms
memory: 9620kb
input:
10000 15 010111111011011 10 1000101111 10 0011111101 1 0 3 110 4 1000 8 10000111 20 00000101000100001110 13 1101110110110 13 0111100011010 17 00001001111110101 1 0 20 10001010011000111100 11 00100110101 11 10110101000 15 001011110011000 16 1110111110000111 15 011110110110010 1 0 20 10110001101100010...
output:
18 9 12 0 3 1 6 7 14 9 14 0 11 6 6 9 19 13 0 11 8 7 4 9 0 6 3 7 4 10 15 6 9 1 9 2 1 11 1 12 16 13 21 5 17 20 26 7 5 4 7 1 1 9 9 5 3 0 0 15 11 8 7 9 7 5 12 1 5 5 17 0 2 12 5 3 9 11 3 11 5 4 11 11 26 2 8 9 11 11 7 1 2 7 2 18 12 6 0 0 6 8 5 12 0 4 8 13 5 4 13 4 8 18 10 1 13 6 8 2 5 12 8 1 7 8 9 3 7 18 ...
result:
wrong answer 1st numbers differ - expected: '11', found: '18'