摘要:
两个多月之前写的题,今天因为看到一道非常相似的题就翻出来了,发现完全不会,没救。 感觉这个题其实第一步是最难想到的,也是最重要的。 设d=gcd(a,b)。那么a=yd,b=xd,且gcd(x,y)=1。a+b|ab等价于x+y|xyd。 由gcd(x,y)=1,得gcd(x+y,y)=gcd(x, 阅读全文
摘要:
显然答案就是最小割。直接跑dinic也能过,不过显得不太靠谱。 考虑更正确的做法。作为一个平面图,如果要把他割成两半,那么显然可以用一条曲线覆盖且仅覆盖所有割边。于是我们把空白区域看成点,隔开他们的边看成边,原图的最小割就是这张新图中能割开原起点和终点的两个区域之间的最短路。 建出来的新图就是原图的 阅读全文
摘要:
一个显然的暴力是用并查集记录哪些位之间是相等的。但是这样需要连nm条边,而实际上至多只有n条边是有用的,冗余过多。 于是考虑优化。使用类似st表的东西,f[i][j]表示i~i+2^j-1与f[i][j]~f[i][j]+2^j-1连接起来了,也就是把这一大段看成一个点所建立的并查集。那么每个限制只 阅读全文
摘要:
模板。注意若x=y不一定是废话,x=0或x=0表示x必须为0。以及数组开2n。 阅读全文
摘要:
开店简化版。 阅读全文
摘要:
考虑这样一个问题:一棵树初始全是白点,有两种操作:把一个点染黑;询问某点到所有黑点的距离之和。 注意到树上两点x和y的距离为depth[x]+depth[y]-depth[lca(x,y)]*2。要求出上面的东西,depth[x]+depth[y]可以很简单的算出来,关键在于depth[lca(x, 阅读全文