您的位置:首页 > 其它

一周总结

2014-08-02 14:37 197 查看
一周总结

费用流:

BZOJ 1927 有n个点保证每个点都走一次,且走完n个点的 最 小花费。分点,保证每个点只走一次。

BZOJ2324 有n个点k个人保证在走完前i-1个点时,才能走第i个点,求遍历n个点的最小花费。此题建边时要用floyd求出前j个点时两点之间的最小距离d[j][i][j],建边时注意在保证从0点出去k个人的同时,还要在源点和其他的点连容量为1费用为0的边,以保证当点的个数大于人的个数的时候能遍历完所有的点。

单调队列:

HDU 2430 话说有n袋豆子,每袋豆子有一个重量wi,求一段连续编号豆子的重量sum%p<=K&&max(sum/p);

由于数据量较大,用单调队列,先求出前i袋豆子sum[i]%p,并记录位置,由于满足以下条件:

前提:i<=j

1.当sum[i]%p<=sum[j]%p 只需找到j前面的i使得上述条件满足即可

2.当sum[i]%p>sum[j]%p 当sum[j]%p<=k时无需再找i,因为本身就满足,否则我们可以得两者余数在[k+1,p-1]区间中,则(sum[j]%p-sum[i]%p+p)%p>=k+2.此时也不用找,

3.综上,我们可以用把sum[i]%p排序,用单调队列解决

其他单调队列,解法类似

二分匹配:

匈牙利算法就不说了。

重点还是KM算法,KM算法求最优匹配,思想就是对二部图中的x部和y部的节点进行赋权lx[maxn],ly[maxn]然后再来一个松弛度数组

Slack[maxn],当一个点扩展路径不成功时,松弛数组改变,改变的原则是每次求出不在交叉树中的最小slack,然后对被访问的ly,lx进行更新,找扩展路径是,是当两点权值之和等于边权时找,否则修改

Slack。

题目:hdu 租房分配

2-sat问题

这个问题其实就是&,|,xor,or问题,根据条件建边,求强连通,找矛盾

在2-sat中最重要的还是在不矛盾时找出匹配,即在每个强连通中去找标记可行的点,并标记已经找过,在求出的多个强连通中找,直到找全。

题目:参加宴会问题,婚姻匹配问题

割点问题:

也是连通题,当dfn[]<=low[]时,dfn所代表的点是割点,并记录是几个联通分量的割点。Hdu 4005 POJ 2117等

概率题

看了一些做的有点少,都是简单的

AC自动机

原理:就是trie树和fail指针的建立,query时只需要找fail指针指向的点next的count就行了

重点fail指针的建立和使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: