結果

問題 No.421 しろくろチョコレート
ユーザー vjudge1
提出日時 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
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#include<bits/stdc++.h>
#define int long long
using 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;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0