SPFA
BrooksBUAA
这个作者很懒,什么都没留下…
展开
-
[BZOJ 1003][ZJOI2006]物流运输:DP+SPFA
点击这里查看原题c[i][j]表示i-j天走同一航线的最小花费,用SPFA处理。 于是得到方程:f[i]=min{f[j]+c[j+1][i]+k},最后结果为f[n]-k。 注意千万不要把n,m打反,我因为把最后结果打为f[m]-k,WA了3次/* User:Small Language:C++ Problem No.:1003 */ #include<bits/stdc++.h> #defi原创 2017-04-11 11:47:39 · 301 阅读 · 0 评论 -
[BZOJ 3669][Noi2014]魔法森林:SPFA
点击这里查看原题把所有边以a为第一关键字,b为第二关键字进行排序,依次加边,每加一条边做一次SPFA,看能否缩小答案。/* User:Small Language:C++ Problem No.:3669 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using namespace std; const i原创 2017-04-14 10:57:31 · 426 阅读 · 0 评论 -
[BZOJ 1179][Apio2009]Atm:Tarjan+SPFA
点击这里查看原题先缩点,然后把负的点权当做边权,用SPFA求最短路(取反即为最长路),在所有有酒吧的点中取dis最大的点即为答案/* User:Small Language:C++ Problem No.:1179 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using namespace std; co原创 2017-05-01 17:53:19 · 360 阅读 · 0 评论 -
[BZOJ 2304][Apio2011]寻路:SPFA
点击这里查看原题首先可以想到这题求最短路,那肯定是SPFA(没有负权边,Dijkstra当然也可以啦),难点在于如何构图。 将坐标离散化,然后将矩形的边和顶点分别做不同的标记。从每个矩形的四个顶点出发,将到达的第一个有标记的点(也就是其他矩形上的点)标记为mark[i][j]=1。 将所有mark[i][j]=1或是矩形的四个顶点的点加入,在同一行或同一列的点之间连边,然后做SPFA即可。 因原创 2017-05-04 10:17:02 · 469 阅读 · 0 评论