2013年4月28日

编程经验总结

摘要: 1.在使用BFS时要用到队列保存结点,同时一般要设置一个布尔型数组vis标记已经访问过的结点,初始值为0,访问过设为1.那么设置vis[i]=1的时机是什么时候呢?这仿佛是个白痴的问题,但如果不注意却有可能使得广搜过程中重复地搜索已访问的的结点而使得时耗大增。答案是在que.push(i);后立即执行vis[i] = true;这样才能有效地标记每一个进入队列的结点。我曾经试过在pop后才标记vis[i]=1,这样就造成了标记滞后,在pop之前可能结点i就被重复访问了。2.(a+b)%c = (a%c+b%c)%c正确,但是(a-b)%c = (a%c-b%c)%c不一定,比如a=7,b=5, 阅读全文

posted @ 2013-04-28 14:00 铁树银花 阅读(159) 评论(0) 推荐(0) 编辑

最大流EK算法模板(BFS实现)

摘要: 变量解释:s-源点d-汇点r[i][j]-残留网络中结点i和结点j间的流量,初始值为边<i,j>的容量flow[i]-记录从源点到结点i的路径<s,...,i>可容纳的最大流量,显然由最短板原理,flow[i]为路径<s,...,i>中容量最少的那一段的容量pre[i]-记录结点i的前驱结点,以便保存增广路径,同时标记已加入队列的结点,避免重复访问 1 #define min(x, y) ((x) < (y) ? (x) : (y)) 2 3 const int maxn = 405; 4 const int inf = 0x7fffffff; 5 i 阅读全文

posted @ 2013-04-28 13:50 铁树银花 阅读(322) 评论(0) 推荐(0) 编辑

导航