摘要:
题目描述 对牛进行拆点 源点——食物——牛——饮料——汇点连边 边的流量都为1,以保证每种食物、牛以及饮料对答案的贡献为1。 阅读全文
摘要:
题目描述 还是看了题解 结论:gcd(f[n],f[m])=f[gcd(n,m)] 引理:gcd(f[n],f[n+1])=1 证明:利用辗转相减法:gcd(f[n],f[n+1])=gcd(f[n],f[n+1]-f[n])=gcd(f[n],f[n-1]),一直相减,最后得到gcd(f[n],f 阅读全文
摘要:
题目描述 用线段树维护三个值:区间最长空位长度,从左端点可以延伸的最长空位长度,从右端点可以延伸的最长空位长度。 阅读全文
摘要:
题目描述 将所有球看做点,在每根柱子上放球就是下边的点向上边的点连边,可以连边的条件是两球编号之和为完全平方数。 再把这n跟柱子看做是n条路径,问题也就转换成了用n条路径覆盖所有的点,也就是最小路径覆盖问题。 //最小路径覆盖数随着点数的增加不会递减,满足二分的性质,但是二分时要重新构图,所以不如直 阅读全文
摘要:
题目描述 裸的二分图最大匹配,也可以用匈牙利算法解决。 阅读全文
摘要:
题目描述 对于一个路径覆盖会有两个性质: 1.每个点属于且只属于一条路径; 2.在每条路径中,除终点外,每个点只有一条边可以通向路径中的另外一个点。 所以可以把每个点拆成两个点,一个是起始点,一个是目标点,建立二分图模型。 二分图中的任何一种匹配都对应着一种路径覆盖方案。 若匹配数为零,那么路径数= 阅读全文
摘要:
题目描述 可以用平衡树维护被摧毁的点,每次询问就是找这个数的前驱和后继(数据很水暴力都能过)。 阅读全文
摘要:
题目描述 从出发点开始依次修改路径上的点权值,然后就是+1或-1的问题。 另附一种树上差分的做法 #include<complex> #include<cstdio> using namespace std; const int N=3e5+7; struct node{ int v,nxt; }e 阅读全文
摘要:
题目描述 将所有的信息插到Trie树里,对每一条密码,都去已经建好的Trie树中找一次。 若这条密码的长度比所有 是它的前缀的信息 的长度大,那么每次遇到完整的信息就统计一次答案; 反之则需统计这条密码是多少条信息的前缀,用一个cnt[i]来记录在Trie树中经过i这个点的信息有多少。 比较坑的地方 阅读全文