摘要: 给出一颗n个点带边权的树(n<=20000),求随机选择两个点,使得它们之间的路径边权是3的倍数的概率是多少。 首先总的对数是n*n,那么只需要统计路径边权是3的倍数的点对数量就行了。 考虑将无根树化为有根树,令dp[x][i]表示以x点为路径起点,x的某个子孙为路径终点的边权值模3为i的点对数量。 阅读全文
posted @ 2017-05-20 16:51 free-loop 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 简化题意可知,实际上题目求得是gcd(i,j)=1(i,j<=n)的数对数目。 线性筛出n大小的欧拉表,求和*2+1即可。需要特判1. # include <cstdio> # include <cstring> # include <cstdlib> # include <iostream> # 阅读全文
posted @ 2017-05-20 15:40 free-loop 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 注意到每个路线相邻车站的距离不超过K,也就是说我们可以对连续K个车站的状态进行状压。 然后状压DP一下,用矩阵快速幂加速运算即可。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <algorithm> #def 阅读全文
posted @ 2017-05-20 15:24 free-loop 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 最小割的建图模式一般是,先算出总收益,然后再通过网络模型进行割边减去部分权值。 然后我们需要思考什么才能带来收益,什么才能有权值冲突。 s连向选的点,t连向不选的点,那么收益的减少量应该就是将s集和t集分开的割边集。 下面说这道题的建图: 点: 每个人一个点,额外设源汇点。 边: 源向人连这个人能造 阅读全文
posted @ 2017-05-20 12:40 free-loop 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 很好的一道题。 题意:给出长度为n的数列,选择k个互不相同的区间,满足每个区间长度在[L,R]内,求所有选择的区间和的总和最大是多少。(n,k<=5e5). 首先将区间和转化为前缀和之差,那么我们想要区间和的总和最大,一个朴素的想法是把所有满足限制的区间和排序,取最大的k个。 考虑每个右端点i,其中 阅读全文
posted @ 2017-05-20 11:09 free-loop 阅读(173) 评论(0) 推荐(0) 编辑