您的位置:首页 > 其它

2016.08.17【初中部 NOIP提高组 】模拟赛C题解

2016-08-17 15:28 281 查看
看起来很难,然而还是水。。。。

T1

呵呵。。。回家(oj1445)的弱化版,直接BFS水过。。。

T2

照样BFS水,当外星人每建立一个基地就进行一次BFS,如果当前城市的最长距离<K,就把当前城市所对应的布尔数组设为TRUE,在把总数减1,最后输出总数就AC了。

T3

这题是这套题的难点。

相信一定有很多同学没看懂题目(包括我),我来解释一下。

有P个哨所如下图(假设P为4):

①----②----③----④

之后可以给你S个阿姆斯特朗回旋加速喷气式阿姆斯特朗通话系统(雾)卫星通话系统,只有当两个拥有这个系统的哨所通话才不计距离,否则只要通话双方有一方没有这个系统就要计算距离。

例如:

①----②----③----④

    10     20    30

假如②和③拥有卫星通话系统,则②和③通话不需要计算距离,而①②和③④的距离就是10和30。

然后要求你求出通话的最长距离,还要这个距离最短。

我们知道,只要给越长的两个哨站装上卫星通话系统,就可以使答案最优。

因此,我们去掉那些然并卵的东西,就变成了下面这题:

有P个节点,且每个节点都可以到达其它的节点,求第P-S(为什么是P-S可以自己去算一下)长的边的长度。

于是,这道题就变
4000
成了一道简(ri)单(gou)的

最小生成树

鉴于数据较大,所以我们采用克鲁斯卡尔算法求最小生成树。

具体怎么求。。。

(回车键卡了)

我还是说一下吧。。。

接下来是克鲁斯卡尔算法:

首先要知道并查集这个神(wei)奇(suo)的东西。

(如果不太清楚可以去看看我同学的这篇文章:http://blog.csdn.net/fengyingjie2/article/details/52192573)

↑↑↑↑↑↑↑↑↑↑↑↑↑上面是广告↑↑↑↑↑↑↑↑↑↑↑↑↑↑

之后,我们可以先计算出每个点到其它点的距离,公式如下:

设点1的坐标为(x1,y1),点2的坐标为(x2,y2),那么,点1到点2的距离为:

sqrt(sqr(x1-x2)+sqr(y1-y2))

不过我不建议使用SQR这个函数,因为一旦结果太大就不精确了。

具体可以用勾股定理来求证(怎么越扯越远了)。

之后求出每条边的距离后,我们可以按照距离进行一次快速排序。

然后,就可以开始神(wei)奇(suo)的那啥算法了。

接下来,我们要用到并查集。

我们依次枚举每一条边(x,y),如果x和y的祖先不是同一个节点(即不在同一个集合里),我们就把它们合并起来,同时把边的两个节点记录进一个数组里。

如果枚举的边数已经等于(S-1)了,那么就可以直接跳出循环。

最后输出第(P-S)条边就可以了。

T4

大水题啊!!!!

看起来好屌的样子然而并没有什么卵用啊!!!!

我们先从第一个位置进行一次DFS,之后记录下以当前节点为根节点时的节点数量(即把当前节点下的子树的节点数量加起来再加上自己本身)。

之后枚举断开的位置,如果断开之后的图节点大于当前节点的结果,就把它变成(N-节点数)。

再判断有没有超过N div 2,如果超过就继续枚举,没有超过就输出。

就这样水了过去。。。。。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: