把多个判断放到外面是不是比放到for内部更优
  • 板块学术版
  • 楼主Ristear
  • 当前回复5
  • 已保存回复5
  • 发布时间2025/7/24 16:59
  • 上次更新2025/7/24 20:57:57
查看原帖
把多个判断放到外面是不是比放到for内部更优
720180
Ristear楼主2025/7/24 16:59

写的 Dinic 的板子,两份代码只有dfs里面有区别

然后第一份代码跑的很慢,#9达到了605ms

int dfs(int x,int flow)
{
	if(x==t) {return flow;}
	int ans=0;
	for(int &i=cur[x];i&&ans!=flow;i=nx[i])
	{
		if(wg[i]&&dep[to[i]]==dep[x]+1)
		{
			int x=dfs(to[i],min(wg[i],flow-ans));
			if(x) {wg[i]-=x;wg[i^1]+=x;ans+=x;}
		}
	}
	if(ans<flow) {dep[x]=-1;}
	return ans;
}

测评记录

而另一份却跑得飞快,#9只有15ms

int dfs(int x,int flow)
{
	if(x==t) {return flow;}
	int ans=0;
	for(int &i=cur[x];i;i=nx[i])
	{
		if(wg[i]&&dep[to[i]]==dep[x]+1)
		{
			int x=dfs(to[i],min(wg[i],flow-ans));
			if(x) {wg[i]-=x;wg[i^1]+=x;ans+=x;}
		}
		if(flow==ans) {break;}
	}
	if(ans<flow) {dep[x]=-1;}
	return ans;
}

测评记录

请问是什么原因导致的呢?

2025/7/24 16:59
加载中...