摘要: 给定一张N个点N条边的有向图,每个点出度为1。求最少增加多少条有向边使得:从1到每个点的最短路径不大于K。显然先要从出度为0的点开始将外面树上的所有点搞掉。问题就转化为剩下一个环,并且环上有一些点已经染好色,可以将其中连续K个点染色,问将其全部染好的最小次数。可以从某点开始染,预处理每个点隔K个之后下一个未染色的点。这样做一次是O(N/k)。可以发现其实只要将任意连续K个未染色的点都做一次就保证能出最优解。总复杂度为O(K)*O(N/K)=O(N)。算法其实不难,但尼玛细节搞死人啊!!!%>_#include#include#include#include#include#include 阅读全文
posted @ 2013-10-19 19:41 FancyCoder0 阅读(307) 评论(0) 推荐(0) 编辑