关于dinic的当前弧优化
查看原帖
关于dinic的当前弧优化
400072
sprads楼主2022/1/5 22:37

为什么这样

ll dinic(int x,ll In){
	if(x == t)return In;
	ll Bk = 0,res;
	for(int i = st[x];i && In;i = Next[i]){
		int y = ver[i];
		if(edge[i] && d[y] == d[x] + 1){
			res = dinic(y,min(In,edge[i]));
			In -= res,Bk += res;
			edge[i] -= res,edge[i ^ 1] += res;
		}
		st[x] = Next[i];//here
	}
	if(Bk == 0)
		d[x] = 0;
	return Bk;
}

如此之慢 提交记录

而这样

ll dinic(int x,ll In){
	if(x == t)return In;
	ll Bk = 0,res;
	for(int i = st[x];i && In;i = Next[i]){
		int y = ver[i];
		if(edge[i] && d[y] == d[x] + 1){
			res = dinic(y,min(In,edge[i]));
			In -= res,Bk += res;
			edge[i] -= res,edge[i ^ 1] += res;
		}
		if(!edge[i])st[x] = Next[i];//here
	}
	if(Bk == 0)
		d[x] = 0;
	return Bk;
}

却快了不少提交记录

2022/1/5 22:37
加载中...