#include<bits/stdc++.h>
using namespace std;
#define int long long
#define getchar() READ.getc()
#define putchar(x) print.putc(x)
#define puts(s) my_puts(s)
FILE*input=stdin;
FILE*output=stdout;
struct in{
char buf[1<<20],*p,*end;
char getc(){if(p==end)end=buf+fread(buf,1,1<<20,input),p=buf;return p==end?EOF:*(p++);}
int operator()(){
int x=0,f=0,ch=getc();
while(!isdigit(ch)&&ch!=EOF){if(ch=='-')f=1;ch=getc();}
while(isdigit(ch))x=x*10+(ch^48),ch=getc();
return f?-x:x;
}
}READ;
struct out{
char buf[1<<20],*p=buf,*end=buf+(1<<20);
void putc(char c){if(p==end)fwrite(buf,1,1<<20,output),p=buf;*(p++)=c;}
void operator()(long long x){
if(x<0)x=-x,putc('-');
if(x>=10)(*this)(x/10);
putc(x%10^48);
}
~out(){fwrite(buf,1,p-buf,output),p=0;}
}print;
void my_puts(const char*s){for(int i=0;s[i]!='\0';i++)putchar(s[i]);putchar('\n');}
int n=READ(),m=READ(),s,t=n*m+1;
int h[10010],e[100010],w[100010],ne[100010],idx;
void add(int a,int b,int c){
e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;
}
int mp[110][110];
#define bh(a,b) (((a)-1)*n+(b))
int dep[10010];
bool bfs(){
memset(dep,0,sizeof(dep));
queue<int>q;
dep[s]=1,q.push(s);
while(q.size()){
int u=q.front();q.pop();
for(int i=h[u];~i;i=ne[i]){
if(w[i]&&!dep[e[i]]){
dep[e[i]]=dep[u]+1;
q.push(e[i]);
}
}
}
return dep[t];
}
int dfs(int d,int v){
if(d==t)return v;
int out=0;
for(int i=h[d];~i;i=ne[i]){
if(w[i]&&dep[e[i]]==dep[d]+1){
int res=dfs(e[i],min(w[i],v));
out+=res,v-=res;
w[i]-=res,w[i^1]+=res;
}
if(!v)break;
}
if(!out)dep[d]=0;
return out;
}
signed main(){
memset(h,-1,sizeof(h));
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
mp[i][j]=READ();
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(i>1&&!(mp[i-1][j]==mp[i][j]&&mp[i][j]))add(bh(i,j),bh(i-1,j),1),add(bh(i-1,j),bh(i,j),1);
if(j>1&&!(mp[i][j-1]==mp[i][j]&&mp[i][j]))add(bh(i,j),bh(i,j-1),1),add(bh(i,j-1),bh(i,j),1);
if(mp[i][j]==1)add(s,bh(i,j),1e8),add(bh(i,j),s,0);
if(mp[i][j]==2)add(bh(i,j),t,1e8),add(t,bh(i,j),0);
}
}
int ans=0;
while(bfs())ans+=dfs(s,1e18);
print(ans),puts("");
return ~0^~0;
}
只有50pts
我真的是萌新,什么当前弧优化预留推进之类的都不会,不像几个帖子下的cz