摘要: 题目链接:https://www.acwing.com/problem/content/description/166/ 计算有向无环图中每个点可达的点的数量,可以先通过拓扑排序确定点的拓扑序,因为在一个点处理之前,他所能到达的所有点都要先被处理,所以我们处理的顺序 只要是按照拓扑排序的逆序处理就能 阅读全文
posted @ 2020-06-18 18:19 WA自动机~ 阅读(169) 评论(0) 推荐(0) 编辑
摘要: #include<iostream> #include<string.h> using namespace std; #define maxn 100 int ver[maxn],head[maxn],nxt[maxn],size[maxn],len[maxn]; int n,m; int vis[ 阅读全文
posted @ 2020-06-18 16:59 WA自动机~ 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 题目链接:https://www.acwing.com/problem/content/description/151/ 给定长度为n的序列,代表一个单词的出现次数,要求构造k叉哈夫曼树使得总权值最小,并且在权值最小的情况下问最小的高度是多少? 我们可以考虑不断取k个数组成一个新的结点放入优先队列, 阅读全文
posted @ 2020-06-18 16:16 WA自动机~ 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 题目链接:https://www.acwing.com/problem/content/149/ 题目中给出一些点在x轴上的位置,问选出k对位置的情况下,他们的两两距离之和的最小值是多少?容易直到,选中的位置一定是相邻的而且没有交集,我们对原始序列求差分之后问题 就变成了在这个差分序列中寻找k个不相 阅读全文
posted @ 2020-06-18 13:43 WA自动机~ 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=2442 给定一个M*N的矩阵,要求从每一行中都取出一个数然后累加,问最小的N个累积和为多少。使用堆可以在O(MNlogN)时间复杂度内求出。 M行的最大取法一定是通过前M-1行的最大取法+第M行取数然后求前N大获取的,所以有归纳法可以考 阅读全文
posted @ 2020-06-18 12:03 WA自动机~ 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1456 题意是给出一些商品的价值以及过期时间,现在每天只能卖出一个商品,问卖出商品的价值总和最多是多少,贪心算法可以解决,用一个集合表示决策 将商品按照过期时间进行排序之后顺序扫描,如果过期时间大于二叉堆中的商品数量就直接放入,若等于就 阅读全文
posted @ 2020-06-18 10:54 WA自动机~ 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3764 我们可以在O(32*n)时间内求出一个长度为n的序列中取两个数的最大异或,而树中的异或有如下公式:path[x]=path(root,x) xor path(root,y),所以处理出path(root,i)之后就简化成了 简单 阅读全文
posted @ 2020-06-18 10:09 WA自动机~ 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 题目链接:https://www.acwing.com/problem/content/145/ 给定一个长度为n的序列,求一个最大的逆序对。利用Trie,每个整数都在树的底部,沿着二进制位进行延伸,匹配的时候优先匹配不同位,因为不同位翻转之后能加在结果上。 代码: #include<bits/st 阅读全文
posted @ 2020-06-18 08:35 WA自动机~ 阅读(132) 评论(0) 推荐(0) 编辑