一周总结

                                                                   一周总结

费用流:

  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,然后对被访问的lylx进行更新,找扩展路径是,是当两点权值之和等于边权时找,否则修改

Slack

题目:hdu 租房分配

2-sat问题

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

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

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

割点问题:

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

概率题

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

AC自动机

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

重点fail指针的建立和使用。

原文地址:https://www.cnblogs.com/sdau--codeants/p/3886981.html