声明:我写的不是正解,我不认为正解的复杂度有问题。
AC
TLE
这两份代码只有一处不同:
for(int i=m;i>=1;--i){
if(!tp[i])continue;
ins(s,i,1),ins(i+m,t,1);
if(tp[i]==2)ins(i,fol[i]+n+m+m,1);
if(tp[i]^4)ins(i,bel[i]+m+m,1);
if(tp[i]^5)ins(bel[i]+n+m+m,i+m,1);
if(tp[i]==1)ins(fol[i]+m+m,i+m,1);
}
经实测,TLE 代码在第 20 个点的运行时间是 AC 代码的 4 倍左右,具体表现为:
- 增广次数大大增加,汇点的深度在每一次增广中直线上升;
- 每次增广增加的流量很小(前几次增广除外)。
虽然我写的不是正解(建的不是一张二分图?),但这也太阴间了。。。
所以,对于没有特殊性质的图,Dinic 的复杂度始终是玄学吧(暴论
不管怎么样,反正我被这个奇怪的现象搞自闭了。。。