怎么一个题解都没有提到,不分析一下谁想到跑最小割?
建模部分代码:
int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
int main()
{
scanf("%d%d",&n,&m);
s=0,t=n*m+1;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
int x;
scanf("%d",&x);
if(x==1) add(s,id(i,j),inf),add(id(i,j),s,0);
if(x==2) add(id(i,j),t,inf),add(t,id(i,j),0);
for(int k=0;k<4;k++)
{
int xx=i+dx[k],yy=j+dy[k];
if(xx<1||yy<1||xx>n||yy>m) continue;
add(id(i,j),id(xx,yy),1);
add(id(xx,yy),id(i,j),0);
}
}
printf("%d\n",Dinic());
return 0;
}