摘要: 这道题用到了很多知识点, 是一道好题目。 第一用了状态压缩, 因为这里最多只有20位, 所以可以用二进制来储存状态 (要对数据范围敏感), 然后涉及到了一些位运算。 第二这里是隐式图搜索, 和之前有一道bfs倒水的有点像, 就是题目和图论没有半毛钱关系,... 阅读全文
posted @ 2018-05-25 21:32 Sugewud 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 这道题是Floyd的变形改成d[i][j] = min(d[i][j], max(d[i][k], d[k][j]))就好了。#include#include#define REP(i, a, b) for(int i = (a); i < (b); i++)usin... 阅读全文
posted @ 2018-05-25 19:33 Sugewud 阅读(133) 评论(0) 推荐(0) 编辑
摘要: Floyd联通, 然后为了输出联通分量而新建一个图, 让互相可以打电话的建立一条边, 然后dfs输出联通分量就ok了。#include#include#include#include#include#include#define REP(i, a, b) for(in... 阅读全文
posted @ 2018-05-24 18:55 Sugewud 阅读(129) 评论(0) 推荐(0) 编辑
摘要: (1)无负权边单源最短路 堆优化dijkstra#include#include#include#define REP(i, a, b) for(int i = (a); i rhs.w; //注意这里是大于,因为要小跟堆 } }; vector g[MAXN];... 阅读全文
posted @ 2018-05-24 16:57 Sugewud 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 标题指的边集是说这道题的套餐, 是由几条边构成的。思路是先做一遍最小生成树排除边, 因为如果第一次做没有加入的边, 到后来新加入了很多权值为0的边,这些边肯定排在最前面,然后这条边的前面的那些边肯定都要再扫一遍, 也就是这条边无论如何都不会选。那么后来就是二进制枚举套... 阅读全文
posted @ 2018-05-22 18:34 Sugewud 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 思路:枚举所有可能的情况。枚举最小边, 然后不断加边, 直到联通后, 这个时候有一个生成树。这个时候,在目前这个最小边的情况可以不往后枚举了,可以直接更新答案后break。 因为题目求最大边减最小边最小, 在最小边确定的情况下, 要使得差值最小, 就要使得最大边最小,... 阅读全文
posted @ 2018-05-21 18:48 Sugewud 阅读(99) 评论(0) 推荐(0) 编辑
摘要: 这道题看了刘汝佳的代码真的是天秀, 很值得学习。具体看代码#include#include#include#include#define REP(i, a, b) for(int i = (a); i g;int done[MAXN], kase, cnt, k;s... 阅读全文
posted @ 2018-05-20 11:53 Sugewud 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 看了这篇博客https://blog.csdn.net/u013520118/article/details/48032599但是这篇里面没有写结论的证明, 我来证明一下。首先结论是对于E图而言,如果存在i和j结点到k1都有边,而i和j中只有一个结点到k2有边,则这个... 阅读全文
posted @ 2018-05-19 12:28 Sugewud 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 又是一道非常复杂的构造法……#include#include#define REP(i, a, b) for(int i = (a); i LHi; i--) //从最高隔板到边缘的时间 lt += h, h = max(h, LHs[i-1]); for(in... 阅读全文
posted @ 2018-05-19 10:58 Sugewud 阅读(339) 评论(0) 推荐(0) 编辑
摘要: 这道题我是从样例中看出思路了2 40 0 1 1看这组数据, 输出的是No, 为什么呢?因为两个1之间没有神龙喝水, 所以一定会有水灾。然后就启发了我,两次同一个湖的降水之间必须至少有一次神龙喝水, 否则就会有水灾。如果是第一个湖的话那么就看作在第0次有一次降水。所以... 阅读全文
posted @ 2018-05-18 22:24 Sugewud 阅读(141) 评论(0) 推荐(0) 编辑