为什么我的当前弧优化是负优化???

P1402 酒店之王

这是没优化的 ```cpp #include<iostream> #include<cstdio> #include<queue> #include<cstring> using namespace std; inline int read(){ int s=0,w=1; char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();} while(ch>='0'&&ch<='9') { s=(s<<3)+(s<<1)+(ch^48); ch=getchar(); } return s*w; } const int inf=1<<28; struct node{ int to,nxt,w; }e[1000001]; int head[200005]; int cur[200005]; int cnt=1; int m,n,p,q; queue<int > qq; void add(int x,int y,int z) { e[++cnt].to=y; e[cnt].w=z; e[cnt].nxt=head[x]; head[x]=cnt; } int s,t; int maxflow; int d[200005],gap[200005]; void bfs() { for(int i=0;i<=n+1;i++) { d[i]=-1;gap[i]=0; } d[t]=0; gap[s]=1; qq.push(t); while(!qq.empty()) { int x=qq.front(); qq.pop(); for(int i=head[x];i;i=e[i].nxt) { int y=e[i].to; if(d[y]!=-1) continue; d[y]=d[x]+1; gap[d[y]]++; qq.push(y); } } return; } int dfs(int x,int flow) { if(x==t) { maxflow+=flow; return flow; } int used=0; for(int i=head[x];i;i=e[i].nxt) { int y=e[i].to; if(d[x]==d[y]+1&&e[i].w) { int mi=dfs(y,min(flow-used,e[i].w)); if(mi) { e[i].w-=mi; e[i^1].w+=mi; used+=mi; } if(flow==used) return used; } } --gap[d[x]]; if(!gap[d[x]]) d[s]=n+1; d[x]++; gap[d[x]]++; return used; } int main() { m=read(); p=read(); q=read(); s=0; n=p+q+m+m+1; t=n; for(int i=1;i<=m;i++) { add(p+i,p+i+m,1); add(p+i+m,p+i,0); for(int j=1;j<=p;j++) { int pd=read(); if(!pd) continue; add(j,i+p,1); add(i+p,j,0); } } for(int i=1;i<=p;i++) { add(s,i,1); add(i,s,0); } for(int i=1;i<=m;i++) { for(int j=1;j<=q;j++) { int pd=read(); if(!pd) continue; add(p+m+i,p+m+m+j,1); add(p+m+m+j,p+m+i,0); } } for(int i=1;i<=q;i++) { add(p+m+m+i,t,1); add(t,p+m+m+i,0); } bfs(); while(d[s]<n) { memcpy(cur,head,sizeof(head)); dfs(s,inf); } printf("%d",maxflow); } ```
by six_小6猪 @ 2021-04-21 07:30:36



by six_小6猪 @ 2021-04-21 07:30:50


当前负优化当然会负优化啊(
by c2020HXW @ 2021-04-21 07:32:13


@[c2020HXW](/user/89561) ??
by six_小6猪 @ 2021-04-21 07:34:02


这个东西很玄学吧,有些图边比较稀疏的就没有用的必要,因为每次向外流都流满了,而且还会增加一点memcpy常数上的影响。
by RedreamMer @ 2021-04-21 07:35:26


对于二分图和一些边流量为1的图随便用不用吧
by RedreamMer @ 2021-04-21 07:36:27


@[RedreamMer](/user/184549) 您的意思是memcpy的常数给我优化抵消了,就成负优化了?
by six_小6猪 @ 2021-04-21 07:39:50


@[six_小6猪](/user/191993) 额,重点不是这个,是在这类特殊图里面当前弧优化基本没有效果
by RedreamMer @ 2021-04-21 07:42:22


小边怎么着跑的都少,没太大必要
by logfk @ 2021-04-21 07:44:51


@[RedreamMer](/user/184549) 明白了,谢谢
by six_小6猪 @ 2021-04-21 07:48:36


|