結果
問題 | No.421 しろくろチョコレート |
ユーザー |
![]() |
提出日時 | 2016-09-11 00:05:58 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 4 ms / 2,000 ms |
コード長 | 2,373 bytes |
コンパイル時間 | 1,890 ms |
コンパイル使用メモリ | 184,264 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-09-23 07:08:21 |
合計ジャッジ時間 | 3,488 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 65 |
ソースコード
#include<bits/stdc++.h>using namespace std;struct cww{cww(){ios::sync_with_stdio(false);cin.tie(0);}}init;struct edge{int flow,to,rev;};typedef vector<edge> E;typedef vector<E> Graph;vector<int> bfs(Graph& G,int s){int N = G.size();queue<int> que;vector<int> dist(N,-1);dist[s] = 0;que.push(s);for(;!que.empty();que.pop()){auto v=que.front();for(auto& e : G[v])if(e.flow>0&&dist[e.to]==-1){dist[e.to] = dist[v] + 1;que.push(e.to);}}return dist;}int maxflow(Graph& G,int s,int t){int res=0;int N = G.size();while(true){auto dist = bfs(G,s);if(dist[t] < 0)break;vector<unsigned> iter(N,0);std::function<int(int,int)> dfs=[&](int v,int f){if(v==s)return f;for(auto &i = iter[v]; i < G[v].size(); i++){edge &e = G[v][i];edge &re = G[e.to][e.rev];if(re.flow>0 && dist[v] >dist[e.to]){int d=dfs(e.to,min(f,re.flow));if(d>0){e.flow+=d;re.flow-=d;return d;}}}return 0;};int f;while((f=dfs(t,114514))> 0)res+=f;}return res;}void addedge(Graph& g,int a,int b,int f){int c=g[a].size();int d=g[b].size();g[a].push_back(edge{f,b,d});g[b].push_back(edge{0,a,c});}typedef vector<int> V;typedef vector<V> VV;int main(){int R,C;cin>>R>>C;vector<string> choko(R);for(auto &s:choko)cin>>s;int B=0,W=0;int S=0;int G=1;VV id(R,V(C));int cnt=2;for(auto &v:id)for(auto &u:v)u=cnt++;Graph g(cnt);for(int r=0;r<R;r++)for(int c=0;c<C;c++){if(choko[r][c]=='b'){addedge(g,S,id[r][c],1);if(c+1<C)addedge(g,id[r][c],id[r][c+1],1);if(r+1<R)addedge(g,id[r][c],id[r+1][c],1);B++;}if(choko[r][c]=='w'){addedge(g,id[r][c],G,1);if(c+1<C)addedge(g,id[r][c+1],id[r][c],1);if(r+1<R)addedge(g,id[r+1][c],id[r][c],1);W++;}}int f=maxflow(g,S,G);int k=min(B-f,W-f);cout<<100*f+10*k+B+W-(f+k)*2<<endl;return 0;}