USACO的一些不错的题目

T1 Watering Hole

题目链接:https://www.luogu.org/problemnew/show/P1550

刚开始看时可能没有思路,但想明白后其实非常简单。可以建一个0点,然后与其它点连边,边权就是在所连点打井所用的钱数,这样再求一边最小生成树即可。很巧妙的一道题。

T2 Tractor

题目链接:https://www.luogu.org/problemnew/show/P1849

一道搜索题,与上面的T1相同,想到就会感到很容易,想不到就另当别论了。另外此题有多种解法,这里只说一种(其实我是不会)。我们可以从拖拉机起点开始bfs,每搜到一个干草堆,就停止在该路径的搜索。这样第一遍bfs下来,如果没有到达目标点的话,我们的答案就要加一了,然后继续进行bfs,直到到达目标点,跳出输出答案即可。有点像以干草推为第一关键字来进行bfs的思想,所以这样搜到的答案显然是最小的。

T3 (乱入一道其它oj的题) 跑路

题目链接:https://www.luogu.org/problemnew/show/P1613

最短路和倍增即可解决。首先看到数据范围不难想到跑Floyed,然后我们可以搞一个倍增数组f[i][j][k],表示小A可以从点i到点j跑2的k次方千米。之后像处理倍增lca时那样枚举所有点,处理倍增数组和dis数组(dis就是floyed中的dis数组),之后跑floyed就可以了。也是很不错的一道题。

T4 Tractor(重名而已)

题目链接:https://www.luogu.org/problemnew/show/P3073

这个题题意就是要我们在给的方格中找出一半的点,使得其各个点之间的最大的高度差尽量小。很明显要二分高度差,之后检验时可以用并查集检验,即枚举每一个格子和它四周的格子,然后把高度差小于等于二分值的合并到一起,最后合并时维护一个size数组,表示集合中元素的个数,若大于等于一半就可以返回true了,否则返回false就可以了。

T5 路障 Roadblocks

次短路的板子题一道,然而我却根本不会这个板子,这道题是比赛时做到的,当时搞这题时时间只有15分钟了,所以心态很崩,拿的暴力分也不如别人多。大体的思路就是正着来一遍最短路,然后再反着来一遍,之后图中任意一条路径的长度都可以用1到u的长度加上u到v的长度加上v到n的长度来表示,而1到u我们正着跑最短路已经处理出,v到n反着跑也已经处理出,而中间边枚举即可。注意如果等于最短路长度时,要忽略,取其它路径的最小值。但由于只能枚举一条边,且其它都是最短路径的部分,所以这种方法只适合求次短路。

T6 (还是其它oj的题目) 间谍网络

题目链接:https://www.luogu.org/problemnew/show/P1262

这道题目可以先判断有无解,标记一下即可。然后就只剩下有解的情况了,这种情况只有两种可能,一种无环的有向图,那么资金就是那个如度为0的点;有环就缩一下点,资金就是环中资金最小的那个,那么就转换成了第一种情况。

在跑缩点时我们要选取能够贿赂的点来跑,再就是跑完后要统计一遍新图的入度,以便计算费用。

你可能感兴趣的:(算法竞赛)