結果
問題 | No.421 しろくろチョコレート |
ユーザー |
![]() |
提出日時 | 2016-09-12 02:03:03 |
言語 | C++11 (gcc 13.3.0) |
結果 |
CE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 1,764 bytes |
コンパイル時間 | 626 ms |
コンパイル使用メモリ | 53,716 KB |
最終ジャッジ日時 | 2024-11-14 19:49:20 |
合計ジャッジ時間 | 1,211 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
コンパイルメッセージ
main.cpp:16:1: error: ‘vector’ does not name a type 16 | vector<E> g[2502]; | ^~~~~~ main.cpp: In function ‘void add_edge(int, int)’: main.cpp:24:9: error: ‘g’ was not declared in this scope 24 | g[f].push_back({t, 1, (int)g[t].size()}); | ^ main.cpp: In function ‘int dfs(int, int, int)’: main.cpp:64:19: error: ‘g’ was not declared in this scope 64 | for(E& e: g[v]){ | ^
ソースコード
#include <iostream>#include <algorithm>#define rep(i, n) for(int i = 0; i < (n); ++i)using namespace std;const int inf = 1e4;struct E{int t, c, r;};int n, m;string s[50];vector<E> g[2502];bool u[2502];int encode(int i, int j){return i * m + j;}void add_edge(int f, int t){g[f].push_back({t, 1, (int)g[t].size()});g[t].push_back({f, 0, (int)g[f].size() - 1});}void make_graph(){rep(i, n){rep(j, m){if(s[i][j] == 0){add_edge(encode(n, 0) ,encode(i, j));}else if(s[i][j] == 1){add_edge(encode(i, j), encode(n, 1));}if(i + 1 < n && s[i][j] + s[i + 1][j] == 1){int p = encode(i, j), q = encode(i + 1, j);if(s[i][j] == 0){add_edge(p, q);}else{add_edge(q, p);}}if(j + 1 < m && s[i][j] + s[i][j + 1] == 1){int p = encode(i, j), q = encode(i, j + 1);if(s[i][j] == 0){add_edge(p, q);}else{add_edge(q, p);}}}}}int dfs(int v, int t, int f){if(v == t){return f;}u[v] = true;for(E& e: g[v]){if(!u[e.t] && e.c > 0){int d = dfs(e.t, t, min(f, e.c));if(d > 0){e.c -= d;g[e.t][e.r].c += d;return d;}}}return 0;}int max_flow(int s, int t){int mf = 0;while(1){fill_n(u, n * m + 2, false);int f = dfs(s, t, inf);if(f == 0){return mf;}mf += f;}}int main(){cin >> n >> m;rep(i, n){cin >> s[i];rep(j, m){s[i][j] = s[i][j] != '.' ? s[i][j] == 'w' : 2;}}make_graph();int k = max_flow(encode(n, 0), encode(n, 1));int b = -k, w = -k;rep(i, n){rep(j, m){if(s[i][j] == 0){++b;}else if(s[i][j] == 1){++w;}}}int l = min(b, w);cout << k * 100 + l * 10 + (b + w - 2 * l) << endl;return 0;}