摘要: 因为有着色数的限制,故使用Burnside引理。 添加一个元置换(1,2,,,n)形成m+1种置换,对于每个置换求出循环节的个数, 每个循环节的长度。 则ans=sigma(f(i))/(m+1) %p (1<=i<=m+1). 其中f(i)是第i种置换下的不动点个数。 可以用dp来求出f(i), 阅读全文
posted @ 2017-02-28 17:20 free-loop 阅读(179) 评论(0) 推荐(0) 编辑
摘要: A.Color the Simple Cycle(polya计数+字符串匹配) 此题的难点在于确定置换的个数,由a[i+k]=a[i], e[i+k]=e[i]联想到KMP。 于是把原串和原串扩大两倍的目标串进行字符串匹配就能求出具体的置换。 这里的算法可以使用hash或者kmp。 然后套polya 阅读全文
posted @ 2017-02-27 21:36 free-loop 阅读(216) 评论(0) 推荐(2) 编辑
摘要: 容易发现DP的做法,dp[i]表示1-i天的最小代价。令cost[i][j]表示i-j天用同一条路的最小价值。 则有 dp[i]=dp[j]+cost[j+1][i]*(i-j)+k (j<i). cost[i][j]可以用n^2次最短路求出来。由于最短路用的是堆优化dijkstra。 所以复杂度为 阅读全文
posted @ 2017-02-27 20:43 free-loop 阅读(289) 评论(0) 推荐(0) 编辑
摘要: A.A + B problem(待填坑) B.Cat VS Dog(二分图匹配) 喜欢cat和喜欢dog的人构成了二分图,如果两个人有冲突则连一条边,则问题转化为二分图最大点独立集问题。ans=n-最大匹配。 # include <cstdio> # include <cstring> # incl 阅读全文
posted @ 2017-02-22 14:44 free-loop 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 给出两个长度小于1000的字符串,有三种操作,插入一个字符,删除一个字符,替换一个字符。 问A变成B所需的最少操作数(即编辑距离) 考虑DP,可以用反证法证明依次从头到尾对A,B进行匹配是不会影响答案的 令dp[i][j]表示A[i]~[lenA]变成B[j]~[lenB]的最优解。 如果把B[j] 阅读全文
posted @ 2017-02-21 21:02 free-loop 阅读(867) 评论(0) 推荐(0) 编辑
摘要: A.Duff and Weight Lifting(思维) 显然题目中只有一种情况可以合并 2^a+2^a=2^(a+1)。我们把给出的mi排序一下,模拟合并操作即可。 # include <cstdio> # include <cstring> # include <cstdlib> # incl 阅读全文
posted @ 2017-02-09 19:15 free-loop 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个n<=50000个点m<=100000条边的无向联通图,每条边上有一个权值wi<=1e18。请你求一条从1到n的路径,使得路径上的边的异或和最大. 任意一条1到n的路径的异或和,都可以由任意一条1到n路径的异或和与图中的一些环的异或和来组合得到。 为什么?假如我们已经有一条1到n的路径 阅读全文
posted @ 2017-02-07 16:42 free-loop 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 显然线性基可以满足题目中给出的条件。关键是如何使得魔力最大。 贪心策略是按魔力排序,将编号依次加入线性基,一个数如果和之前的一些数异或和为0就跳过他。 因为如果要把这个数放进去,那就要把之前的某个数拿出来,而这样交换之后集合能异或出的数是不会变的,和却变小了。 # include <cstdio> 阅读全文
posted @ 2017-02-06 23:21 free-loop 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 给出四个长度为n的数列a,b,c,d,求从这四个数列中每个选取一个元素后的和为0的方法数。n<=4000,abs(val)<=2^28. 考虑直接暴力,复杂度O(n^4).显然超时。 # include <cstdio> # include <cstring> # include <cstdlib> 阅读全文
posted @ 2017-01-29 14:32 free-loop 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 题意:有长度为N的01串,有一个操作可以选择连续K个数字取反,求最小的操作数和最小的K使得最后变成全1串.(N<=5000) 由于K是不定的,无法高斯消元。 考虑枚举K,求出最小的操作数。 显然同样的区间操作两次是没必要的,且区间长度是一定的。从左到右依次考虑每个左端点i。如果为0,则需要改变区间[ 阅读全文
posted @ 2017-01-23 21:59 free-loop 阅读(187) 评论(0) 推荐(0) 编辑