摘要: 二分图最大匹配匈牙利算法。 阅读全文
posted @ 2018-01-24 19:18 TrassBlose 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 一看就想到了二分图最大匹配的匈牙利算法。 注意要加时间戳优化,不然会超时。 在网上找到了并查集做法,不难理解。 如果没有出现环,那么结果肯定是一片森林。 我们肯定每次选小的。 如果出现了环,那么环所在集合每个数都可以选了。 于是我们使用并查集维护集合。 保证集合的祖宗是整个并查集中最大的属性值。 每 阅读全文
posted @ 2018-01-24 18:57 TrassBlose 阅读(107) 评论(0) 推荐(0) 编辑
摘要: 正着思考是无法得出答案的。 考虑容斥,可能发生越狱的状态=全部状态-不可能发生越狱的状态。 全部状态就是M^N。 不可能发生越狱的状态:第一个房间是随便什么宗教,而第二个房间不能和第一个一样,而第三个房间不能和第二个一样…… 用乘法原理算一下就是M*(M-1)^(N-1)。 快速幂即可。 阅读全文
posted @ 2018-01-24 18:41 TrassBlose 阅读(104) 评论(0) 推荐(0) 编辑
摘要: map。 注意要当c=0时要去重。 阅读全文
posted @ 2018-01-24 14:24 TrassBlose 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 接起来试试看。 C++string自带比较,比较的是字典序的大小。 自带+运算符,可以把两个字符串接在一起。 阅读全文
posted @ 2018-01-24 13:57 TrassBlose 阅读(76) 评论(0) 推荐(0) 编辑
摘要: 排序一遍,保证数值相同的数放在一起。 直接枚举每一个数判断和前面的数是否相同:相同就累加数量;否则就输出,然后把数量重置为1。 阅读全文
posted @ 2018-01-24 13:53 TrassBlose 阅读(91) 评论(0) 推荐(0) 编辑
摘要: 正解应该是求带权树的重心,然而这个数据范围用Floyed就可以了。 阅读全文
posted @ 2018-01-24 13:39 TrassBlose 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 树状数组的模板。 阅读全文
posted @ 2018-01-24 13:22 TrassBlose 阅读(85) 评论(0) 推荐(0) 编辑
摘要: 设calc(a,b)就是计算a/b取上整。 设三种铅笔的数量为a1,a2,a3,价格为b1,b2,b3。 答案就是min(calc(n,ai)*bi)。 阅读全文
posted @ 2018-01-24 13:06 TrassBlose 阅读(98) 评论(0) 推荐(0) 编辑
摘要: 差分。 设a[i]为这个点被多少个区域包含。 设f[i]为a[i]-a[i-1]。 于是每次读入一个区间[u,v]就把f[u]++,f[v+1]--。 每次计算前加上f[i]就是a[i]了。 只有当a[i]=0时这棵树才没有被砍掉。 阅读全文
posted @ 2018-01-24 12:57 TrassBlose 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 递推。 f[i]表示把i进行处理可得的数的个数。 枚举头部接什么数可得递推式f[i]=1+∑f[j] (j<=i/2)。 其实可以用前缀和优化,不过这题的数据范围没这个必要。 阅读全文
posted @ 2018-01-24 12:43 TrassBlose 阅读(74) 评论(0) 推荐(0) 编辑
摘要: 全部转化成角为单位计算。 阅读全文
posted @ 2018-01-24 12:37 TrassBlose 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 贪心。 先按纪念品的价格排序一遍。 考虑最小的一个纪念品:如果可以和最大的纪念品合成一组,就合成一组。否则就让最大的纪念品单独一组。 阅读全文
posted @ 2018-01-24 12:07 TrassBlose 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 模拟。 阅读全文
posted @ 2018-01-24 12:01 TrassBlose 阅读(90) 评论(0) 推荐(0) 编辑
摘要: 先把各条地毯的数据存储下来。 然后从后往前找到的第一条包含(x,y)的地毯编号就是答案。 阅读全文
posted @ 2018-01-24 11:45 TrassBlose 阅读(94) 评论(0) 推荐(0) 编辑
摘要: 体积和价值设为相等做一遍01背包。 然后输出v-f[v]即可。 阅读全文
posted @ 2018-01-24 11:37 TrassBlose 阅读(103) 评论(0) 推荐(0) 编辑