关于 Dinic
  • 板块学术版
  • 楼主UKE_Automation
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/5/23 19:44
  • 上次更新2024/5/23 21:29:00
查看原帖
关于 Dinic
546536
UKE_Automation楼主2024/5/23 19:44

在 [P4194] 矩阵 中,我的 Dinic 分别使用了如下的两段代码:

int dfs(int x, int flow) {
	if(x == T) return flow;
	int rest = flow;
	for(int i = cur[x]; i && rest; i = edge[i].nxt) {
		cur[x] = i;
		int to = edge[i].to, w = edge[i].w;
		if(w > 0 && dis[to] == dis[x] + 1) {
			int k = dfs(to, min(rest, w));
			rest -= k;
			edge[i].w -= k;
			edge[i ^ 1].w += k;
		}
	}
	return flow - rest;
}
int dfs(int x, int flow) {
	if(x == T) return flow;
	int rest = flow;
	for(int i = cur[x]; i; i = edge[i].nxt) {
		cur[x] = i;
		int to = edge[i].to, w = edge[i].w;
		if(w > 0 && dis[to] == dis[x] + 1) {
			int k = dfs(to, min(rest, w));
			rest -= k;
			edge[i].w -= k;
			edge[i ^ 1].w += k;
		}
	}
	return flow - rest;
}

说白了就是有没有剩余容量判断的差别。但是一个 TLE 40pts,一个 AC 151ms。

但是我听说剩余容量判断只是一个常数优化,所以这个 TLE 真的就是常数爆炸了吗?又或者我的 Dinic 写假了?

求大佬指点 qwq。

2024/5/23 19:44
加载中...