結果
問題 | No.421 しろくろチョコレート |
ユーザー |
![]() |
提出日時 | 2024-12-22 16:52:06 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,182 bytes |
コンパイル時間 | 2,258 ms |
コンパイル使用メモリ | 177,288 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-12-22 16:53:02 |
合計ジャッジ時間 | 3,799 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 43 WA * 22 |
ソースコード
#include<bits/stdc++.h>#define int long longusing namespace std;struct node{int to,next;}a[200010];int head[200010],in[10010],cnt,ans,x,y;bool f[10010];char c[1010][1010];queue<int> q;priority_queue<pair<int,int> > que;void add(int u,int v){a[++cnt].to=v;a[cnt].next=head[u];head[u]=cnt;}void add_edge(int u,int v){in[u]++;in[v]++;//cout<<u<<" "<<v<<endl;add(u,v);add(v,u);}void clear(int x){for(int i=head[x];i;i=a[i].next){int v=a[i].to;if(in[v]!=0)in[v]--;if(in[v]==1)q.push(v);}}void pop(int x){for(int i=head[x];i;i=a[i].next){int v=a[i].to;if(in[v]!=0)in[v]--;if(in[v]!=0)que.push({-in[v],v});}}signed main(){int n,m,k;cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>c[i][j];if(c[i][j]=='w')x++;else if(c[i][j]=='b')y++;}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(i+1<=n&&c[i+1][j]!='.'&&c[i][j]!='.'&&c[i+1][j]!=c[i][j])add_edge((i-1)*m+j,i*m+j);//,cout<<i<<" "<<j<<" "<<i+1<<" "<<j<<" "<<(i-1)*n+j<<" "<<i*n+j<<endl;if(j+1<=m&&c[i][j+1]!='.'&&c[i][j]!='.'&&c[i][j]!=c[i][j+1])add_edge((i-1)*m+j,(i-1)*m+j+1);//,cout<<i<<" "<<j<<" "<<i<<" "<<j+1<<" "<<(i-1)*n+j<<" "<<(i-1)*n+j+1<<endl;}}for(int i=1;i<=n*m;i++){if(in[i]==1)q.push(i);}while(!q.empty()){int u=q.front();q.pop();if(!in[u])continue;for(int i=head[u];i;i=a[i].next){int v=a[i].to;if(!in[v])continue;in[u]=in[v]=0;clear(u);clear(v);ans+=100;x--;y--;break;}//cout<<ans<<" "<<x<<" "<<y<<endl;}for(int i=1;i<=n*m;i++){if(in[i]>1){que.push({0,i});while(!que.empty()){int u=que.top().second;que.pop();if(!in[u])continue;for(int i=head[u];i;i=a[i].next){int v=a[i].to;//cout<<i<<" "<<u<<" "<<v<<endl;if(!in[v])continue;in[v]=in[u]=0;pop(u);pop(v);ans+=100;x--;y--;break;}//cout<<ans<<" "<<x<<" "<<y<<endl;}}}//cout<<min(x,y)<<" "<<max(x,y)<<endl;ans+=min(x,y)*10+max(x,y)-min(x,y);cout<<ans<<endl;return 0;}