2017-9-24离线赛总结

来源:互联网 发布:js toobject方法 编辑:程序博客网 时间:2024/05/24 07:30

这是这段时间的第一次离线赛

失分小结:

估分:200
实际分数:100
原因:第二题炸零 内存超限
收获:以后写完程序之后,要计算空间复杂度(这比时间超限更恐怖!)
还有,水完分之后不要划水!仔细检查,找bug!

思路不完善

第二题应把记忆化搜索改成dp,这样可以实现滚动数组

知识漏洞

最小生成树不会打
看到第三题后一脸懵逼qwq
一分也水不到

题解
感觉前两道都是水题
最后一道仔细分析一下也就是 最小生成树预处理+LCA(倍增)

题目描述
GeassCode凭借自己在topcoder上的超凡表现,赢得了国王的喜爱,国王赏赐他一座城池。这座城池里有n个村子,m条路连接这些村子。坐上城主的GeassCode决定要修路,他打算用最少的代价把所以的村子连在一起。据探子回报,有些村子之间虽然原来没有路径,但是可以强行的去建一条路。GeassCode想知道,如果强行在某两个村子之间建一条路,最后的总花费是多少?
输入
输入一行三个整数n,m,表示有n个村子,m条可建路径。
2..m+1行,每行3个整数a,b,c(a≠b),表示可以在a和b村庄建一条花费为c的路径。
第m+2行一个整数q,表示有多少个询问。
接下来q个询问,每行3个整数a,b,c(a≠b),表示如果可以另外在a和b村庄建一条花费为c的路径,最终需要多少花费?
输出
对于每个询问输出,输出最少的花费。
数据范围
30%的数据,n的范围[2,200],m的范围[2,2000],q的范围[1,1000]。
50%的数据,n的范围[2,2000],m的范围[2,20000],q的范围[1,10000]。
100%的数据,n的范围[2,50000],m的范围[2,100000],q的范围[1,50000]。
输入的m条边保证可以把所有村庄连在一起。输入的边权范围[1,106]

分析题目:使花费最少,就是让我们建一个最小生成树
当我们在询问中在最小生成树中添加一条边时
这个最小生成树上就会形成一个环
求环可以用LCA
然后用贪心的思想删去这个环上的最大值
显然O(n)的枚举是一定会超时的
所以用一些数据结构维护就好了
因为最小生成树不会时刻改变,所以可以用倍增
然后就AC了ni

原创粉丝点击