摘要:
容易想到贪心:吃饭慢的先打饭节约时间, 所以先将人按吃饭时间从大到小排序。 是可以证明无论怎么交换,都没有这样选优的。在这里由于我太菜了,就不写证明了 我们设dp[i][j]表示前i个人 在1号窗口打饭总时间为j 最早吃饭完的时间 那也就顺便可以推出在二号窗口的打饭总时间了 影响到当前dp[i][j 阅读全文
摘要:
好题 同样的 我们考虑把环展开成链来想 我们引入一个概念:关键点 即 环外边的起点终点 对于u,v两点 u,v的最短路,必定是 环外边+环上连续一段...这样的几个组合拼成的 其次我们发现 “环上连续一段” 是很费时间的 极大地拖慢了我们spfa的效率 那么我们似乎只需要对于相邻两个关键点连一条权值 阅读全文
摘要:
两个管道相交是啥情况? 有环展链 我们把环展成链过后 发现只会出现如下图两种情况 然后我们维护二维BIT1:表示左端点小于等于x 右端点小于等于y的个数 BIT2:左端点大于等于x 右端点小于等于y BIT3:左端点大于等于x 右端点大于等于y 查询就很简单了 对于操作1相当于一个更新 阅读全文
摘要:
我日哦 完全忘了前几天才做的星球大战(JSOI2008 这道题还有花椒麻你 告诉你是一棵树 迷惑你是树上算法 正难即反 考虑离线存下点 用并查集维护 先把没有被破坏的点连起来 当两个联通块将要merge的时候 这时总贡献加了他们的权值和之积(根据乘法分配率可得 简直和星球大战一模一样 cpp inc 阅读全文
摘要:
注意到x xor y 在二进制下1的个数是和x,y在二进制下1的个数有关 更具体的来说:一奇一偶是满足要求的 不加任何优化可以拿80分 O(nlogv) 我们又发现过程中会出现比较多的重复的数 因此可以记忆化一下 拿到90分 不过我们需要O(n)才能过 所以需要一个O(1)求x在二进制下的个数的方法 阅读全文