上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 27 下一页
摘要: (警告:本篇博客包含大量人类本质内容) 先处理出来lca,然后就只需要知道从每个点到他的父亲、和从他的父亲到这个点的期望时间就可以了 我们设f[x]为x到他父亲的期望时间;g[x]为从x的父亲到x的期望时间(注意到这两个是不一样的) 只考虑怎么算f,g是类似的 从某个点想走到他父亲时,情况会有:直接 阅读全文
posted @ 2018-10-06 20:57 Ressed 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 由于保证有解,所以1%gcd(x,y)=0,所以gcd(x,y)=1,直接做就行了 阅读全文
posted @ 2018-10-01 20:53 Ressed 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 设f[i][j]为把i拆成j个不重复的、大于0小于等于N的数的方案数 我们考虑一个方案是怎么来的:(初始状态是f[0][0]=1) 如果这个方案里有1,那它是先把原来的状态的每个数加1、然后再增加一个1 如果这个方案没有1,那它是把原来的状态直接每个数加1得来的 就对应了方程$f[i][j]=f[i 阅读全文
posted @ 2018-10-01 20:51 Ressed 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 考虑某个点产生的贡献: 如果i左边是一个比它小的数x,那有两种情况: 1.x的左边的数y大于i,肯定要把x合并到i,i的贡献++ 2.x的左边的数y小于i,那肯定要把x合并到y,而这时候递归地来考虑,总有一天y或更左边的一个数是要合并到i上的,i的贡献++ 如果i左边的数x比它大,那就把i合并到x, 阅读全文
posted @ 2018-10-01 20:44 Ressed 阅读(291) 评论(0) 推荐(0) 编辑
摘要: 1 #include 2 #define pa pair 3 #define CLR(a,x) memset(a,x,sizeof(a)) 4 using namespace std; 5 typedef long long ll; 6 const int maxn=1010,maxm=110; 7 8 inline ll rd(){ 9 ll x=0;char c=... 阅读全文
posted @ 2018-10-01 20:38 Ressed 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 先从大到小排序,看到哪个的时候安排不开了 给每个人拆成两个,如果x和y有矛盾,就给x和y‘、y和x’连边;如果a和b(或a'和b')在同一个集合里,说明他们一定要在同一个监狱里。 阅读全文
posted @ 2018-10-01 20:37 Ressed 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 先二分出一个时间,把每个军队倍增往上跳到不能再跳 然后如果它能到1号点,就记下来它跳到1号点后剩余的时间;如果不能,就让它就地扎根,记一记它覆盖了哪些叶节点(我在这里用了dfs序+差分,其实直接dfs就行..) 然后对于那些叶节点没有被覆盖完全的(父亲为1号点的)子树,肯定需要一些已经到1号点的军队 阅读全文
posted @ 2018-10-01 20:09 Ressed 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 先二分一个答案x,然后通过差分来看有没有不满足的 阅读全文
posted @ 2018-10-01 19:58 Ressed 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 做dijkstra,但只需要贪心地把每个点连到它左边、右边、上边、下面的第一个点就可以了 阅读全文
posted @ 2018-10-01 19:56 Ressed 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 先用不管什么方法求出来从每个点出发,A走到哪、B走到哪(我写了一个很沙雕的STL) 然后把每个点拆成两个点,分别表示A从这里出发和B从这里出发,然后连边是要A连到B、B连到A、边长就是这次走的路径长度 为了方便,把不能继续走的点连到一个假节点1上(不连应该也无所谓) 然后我们预处理倍增,但要把A走的 阅读全文
posted @ 2018-10-01 19:53 Ressed 阅读(179) 评论(0) 推荐(0) 编辑
上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 27 下一页