上一页 1 2 3 4 5 6 7 8 9 10 ··· 18 下一页
摘要: "题目链接" Solution 有几点关键,首先,可以证明次小生成树一定是由最小生成树改变一条边而转化来. 所以需要枚举所有非最小生成树的边$(u,v)$.并且找到 $u$ 到 $v$ 的边中最大边和次大边. 为什么要找次大边呢?? 因为可能最大边与要替换的边长度相等,那么这种条件生成的便不是严格的 阅读全文
posted @ 2018-09-06 14:41 Kevin_naticl 阅读(354) 评论(0) 推荐(1) 编辑
摘要: "题目链接" Solution 直接维护一个差分的线段树就好了. 其中线段树的节点代表 $r$ 比 $l$ 多多少. Code cpp include define ll long long define mid (l+r)/2 using namespace std; const int maxn 阅读全文
posted @ 2018-09-05 15:47 Kevin_naticl 阅读(138) 评论(0) 推荐(0) 编辑
摘要: "题目链接" Solution 裸的最小生成树. Code cpp include using namespace std; const int maxn=500008; struct sj{int to,fr,w;}a[maxn]; bool cmp(sj x,sj y) {return x.w' 阅读全文
posted @ 2018-09-05 10:55 Kevin_naticl 阅读(256) 评论(0) 推荐(0) 编辑
摘要: "题目链接" Solution $Trie$ 树 + 启发式合并. 考虑到是异或,于是按位贪心.让高位的尽量相同. 然后要计算每棵子树的代价,似乎并没有很好的方法?? 于是只能启发式合并. 对于每一个有两个子节点的点; 将 $siz$ 较小的点中的值放到 $siz$ 较大的子树中去查询即可. 时间复 阅读全文
posted @ 2018-09-04 21:32 Kevin_naticl 阅读(752) 评论(0) 推荐(1) 编辑
摘要: "题目链接" Solution $Kruskal$ 加一点点东西就好... $n$ 很小,可以暴力搞出所有的边. 然后按照边的大小排序. 用一个并查集维护关系. 同时记录联通块的数量,大于 $k$ 的时候照样维护关系. 如果已经等于 $k$ ,直接找到第一条两端点不在同一联通块的边输出就好. Cod 阅读全文
posted @ 2018-09-03 14:54 Kevin_naticl 阅读(148) 评论(0) 推荐(1) 编辑
摘要: "题目链接" Solution 基本上就是个板子. 因为 $n$ 很小,只有 $2000$,所以直接暴力建图,然后跑最小生成树就好了. Code cpp include define ll long long using namespace std; const int maxn=2008; str 阅读全文
posted @ 2018-09-03 10:44 Kevin_naticl 阅读(313) 评论(0) 推荐(1) 编辑
摘要: "题目链接" Solution 裸题诶... 直接 $Tarjan$ 缩点+ $SPFA$ 最长路即可. 不过在洛谷上莫名被卡... RE两个点... Code cpp include define ll long long using namespace std; const int maxn=2 阅读全文
posted @ 2018-09-02 15:50 Kevin_naticl 阅读(163) 评论(0) 推荐(1) 编辑
摘要: "题目链接" Solution 分块+$Dijkstra$. 难点在于建边,很明显 $O(n^2)$ 建边会挂一堆 . 那么考虑一下, $n^2$ 建边多余的是哪些东西 $???$ 很显然是冗杂的边,即两个点在之前已经可以互达了,但是在这一次仍然又连接一遍. 所以我们对于 $n$ 个点 都开 $sq 阅读全文
posted @ 2018-09-02 10:42 Kevin_naticl 阅读(182) 评论(0) 推荐(1) 编辑
摘要: "题目链接" Solution 1. 非正解 似乎比较蛇啊,先个一个部分分做法,最短路+$DP$. 在求最短路的堆或者队列中存储元素 $dis_{i,j}$ 代表 $i$ 这个节点,走了 $j$ 条边的距离. 然后跑堆优化 $Dijkstra$ 或者 SPFA 即可. 复杂度 $O(N nlog(n 阅读全文
posted @ 2018-08-28 18:18 Kevin_naticl 阅读(239) 评论(0) 推荐(0) 编辑
摘要: "题目链接" Solution 在最短路转移的时候在队列或者堆中记录状态为 $f[u][v]$ 代表上一个节点为 $u$ ,速度为 $v$ . 然后按部就班转移即可... Code cpp include define ff double using namespace std; struct sj 阅读全文
posted @ 2018-08-27 20:01 Kevin_naticl 阅读(242) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 10 ··· 18 下一页