常规这道题 Dinic 时间复杂度是多少
查看原帖
常规这道题 Dinic 时间复杂度是多少
638537
g1ove楼主2024/7/17 16:07

怎么一个题解都没有提到,不分析一下谁想到跑最小割?

建模部分代码:

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;
}
2024/7/17 16:07
加载中...