摘要: 先Tarjan缩点。 然后枚举每一条边,统计每一个强连通分量出度是否为0。 如果只有一个强连通分量的出度为0那么答案就是这个强连通分量中牛的个数。 否则答案就是0。 阅读全文
posted @ 2017-10-22 20:47 或是七一 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 贪心题,每次肯定是选最小的两堆。 哈夫曼树裸题,用优先队列维护最小值。 单调队列。 先放入一个数组中从小到大sort一遍。 然后选择最小的两个合并,放入一个队列的队尾。 每次最小那个只有可能是数组的队首或者队列的队首。(队列中的数必然是有序的) 时间复杂度还是O(nlogn),但是常数似乎要小一些。 阅读全文
posted @ 2017-10-22 20:44 或是七一 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 经典贪心题。 先按照t2从小到大sort一遍。 设ans为前i个中最多选几个。 now为选ans个的情况下最少花费的时间。 用大根堆维护ans个中消耗时间最长的值。 如果可以直接选就直接选。把消耗的时间加到now中,把消耗的时间放进堆里。 否则如果消耗的时间比ans个中消耗时间最长的值小就把那个最大 阅读全文
posted @ 2017-10-22 20:37 或是七一 阅读(80) 评论(0) 推荐(0) 编辑
摘要: 二进制拆分。 由2^0,2^1,2^2……可以组成小于等于这些二的倍数的和的所有数。 所以直接就水过了,不过我的代码写得比较差喽。 阅读全文
posted @ 2017-10-22 20:27 或是七一 阅读(79) 评论(0) 推荐(0) 编辑
摘要: 补集思想。快速幂。 总方案数为M^N。 不会发生越狱的方案数就是(M-1)^(N-1)*M。(第一个人随便选,后面的人不能选和前面一个人一样的宗教。) 可能会发生越狱的方案数=总方案数-不会发生越狱的方案数。 主要输出的时候可能减出来一个负数,所以要加上一个100003。 两种快速幂写法。 递归。 阅读全文
posted @ 2017-10-22 20:21 或是七一 阅读(60) 评论(0) 推荐(0) 编辑
摘要: ANS=MAX/MIN。 先把边按照权值从大到小sort一遍。 按顺序枚举MIN,MAX需要尽量小,所以就是让S和T联通的最大边权最小。 这不就是最小生成树的性质吗? 于是直接Kruskal水过,直到S和T在同一集合就break。 阅读全文
posted @ 2017-10-22 20:15 或是七一 阅读(111) 评论(0) 推荐(0) 编辑
摘要: 中位数既然是b,那么在b左右两边比它大的数和比它小的数的个数必然要相等。 考虑把比b小的数赋值为-1,比b大的数赋值为1,b所在位置赋值为0。 做一遍前缀和,设b所在位置为w,那么问题转化为求sum[i]=sum[j](0<=i<w,w<=j<=n)的个数,开个桶来统计一下即可。 注意这个连续子序列 阅读全文
posted @ 2017-10-22 20:05 或是七一 阅读(78) 评论(0) 推荐(0) 编辑