dfs
zzk_233
这个作者很懒,什么都没留下…
展开
-
NOIP2017 Day1 T3 逛公园(spfa+dfs)
原来k≤50。。我还担心开不下。。 设代表当前点在误差小于等于k时到达终点的情况数量 首先求出n到每个点的最短路。然后dfs,每次如果dis[to]-dis[u]+edge[i].val≤k那么就可以更新。如果搜过的点出现过那么直接-1 最后返回dfs的值(也就是f[1][K])即可 #include<cstdio> #include<algorithm> #in...原创 2018-10-01 11:05:11 · 205 阅读 · 0 评论 -
雅礼集训 Day2 T3 联盟
原创 2018-10-24 09:38:45 · 282 阅读 · 0 评论 -
codeforces 1005F Berland and the Shortest Paths
题目大意:给出n个点,m条边,和一个k,要求构成一棵树,每个点到1的距离都是原图中的最短路,输出有多少种。边权为1 如果小于等于k种,就输出所有情况,以字符串的形式表示每条边是否选择,边的编号按照读入顺序。大于k种就随便输出k种。 据说这叫最短路树。。。 因为边权为1,所以考虑每个点最短的情况一定是从一个连向他的最短的点+1得到的。所以从1开始bfs,找到每个点的最短距离。 然后枚举每条边...原创 2018-10-29 23:39:57 · 139 阅读 · 0 评论 -
codeforces 1042F Leaf Sets
题目大意:给定一棵n个点的树,将叶子节点分为数个集合,使集合里点对最长距离不超过k,求最少集合数。 贪心,考虑一个非叶节点,它的下面的叶子结点对当前点之间的距离排序之后,当这个叶子结点和比它小的一个的和大于k的 时候,代表后面的每一个叶子结点都要新开一个集合,而之前的可以继续作为一个集合向上更新。最终会剩下一个集合,所以 答案要+1。注意要选择一个度数不为1的点作为开始点(就是非叶节点)。 ...转载 2018-11-01 21:08:02 · 167 阅读 · 0 评论