最短路
TSOI_Vergil
这个作者很懒,什么都没留下…
展开
-
BZOJ 1001 最短路求最小割
对于这道题,是一个裸的求一张图最小割的问题,可是数据太大,dinic过不了,注意到题目中的图是平面图,因此我们可以通过将平面图转化为对偶图的形式在对偶图中跑最短路,这样就可以用SPFA或堆优化的dijkstra来做了#include #include #include #include using namespace std; #define maxn 2000005 int last[3*max原创 2016-08-17 19:20:20 · 425 阅读 · 0 评论 -
BZOJ 2330 差分约束系统
差分约束系统是用最短路的三角不等式来得到题目中给定的不等式的一组解,具体来说,最短路中的不等式为if (dis[v]>dis[u]+len[p]) dis[v]=dis[u]+len[p],假设题目中给定不等式Adis[B]+5) dis[A]=dis[B]+5,这样就把数学中的不等式转换成图上的路径关系。每一个不等式变量的解即为它对应点的dis值。 #include #include #inc原创 2016-08-19 07:48:53 · 254 阅读 · 0 评论 -
NOIP[2013] 华容道
一道能够让人深刻理解“状态“含义的图论题目。首先一个很简单的做法就是暴力BFS,以空格子为起点进行BFS,需要记录的有2个量:空格子的位置和目标棋子的位置,我们考虑这样的复杂度,由于是BFS,每个节点只会被访问一次,不同的节点数有n*m*n*m个,再算上q组询问,复杂度为q*n*m*n*m。可以拿到60分。 其实我们有很多状态都是没有必要的,题目中的q组询问中的地图是不会改变的,于是原创 2016-11-03 10:17:07 · 282 阅读 · 0 评论 -
UVA 10917
这道题的意思是,起点是1,终点是2,从1走到2,对于一条边(a,b),只有当存在一条从b出发的到2的路径长小于任何从a出发的路径长,我们才能走,问走到2的方案数。首先我们考虑,如果存在一条b出发的路径,那一定是b到2的最短路,而从a出发到2的路径的最小值也是a到2的最短路,那么我们可以以2为起点做一遍最短路,然后我们枚举边,如果对于一条边(u,v),dis[u]>dis[v],我们就在新图中加入u原创 2016-10-27 07:04:58 · 249 阅读 · 0 评论 -
洛谷 1710
这道题是一道图论题,题目的意思是每次删除一条边,询问当前有多少点与1号节点的最短路的值与未删边之前不同。首先我们一定是求出原图的最短路,由于我们可以默认边权是1,于是我们可以BFS,这样我们就能够得到一张“最短路图”,所谓最短路图就是说对于一条边(u,v),我们只走dis[v]=dis[u]+1的边,这样如果删除的边不是最短路图上的边,对其他点是没有任何影响的,那我们考虑如果删除最短路图上的边,只原创 2016-10-30 08:30:27 · 316 阅读 · 0 评论 -
洛谷 1606
如果没有第二问,这道题我们可以很容易的用最短路解决,但是第二问很不好搞,它要我们统计方案数,对于最短路来说,统计不同最短路的条数还是很容易的,但是题目中要求的是摆放不同莲花的方案,我们考虑对于一条最短路,只要它经过的点不同,就被认为是不同的,那如果在不同的最短路中经过的是相同的水块,那其实还是1种方案,那怎么办呢,我们考虑能不能设计一种建图的方式使我们可以除起点和终点外不再经过水块。我们考虑做这个原创 2016-10-31 07:03:42 · 349 阅读 · 0 评论 -
洛谷 1986
这道题一开始想的就是差分约束,后来由于考虑不当导致WA,我们考虑其实题目给的是m个不等式,即sum[b[i]]-sum[a[i]-1]>=c[i],而我却忽略了剩下的两个重要的不等式,即 sum[i]>=su#include #include #include using namespace std; #define maxn 100005 int n,m,l; int last[maxn],p原创 2016-10-20 20:11:42 · 244 阅读 · 0 评论